On-demand execution of object transformation code in output path of object storage service

ABSTRACT

Systems and methods are described for modifying input and output (I/O) to an object storage service by implementing one or more owner-specified functions to I/O requests. A function can implement a data manipulation, such as filtering out sensitive data before reading or writing the data. The functions can be applied prior to implementing a request method (e.g., GET or PUT) specified within the I/O request, such that the data to which the method is applied may not match the object specified within the request. For example, a user may request to obtain (e.g., GET) a data set. The data set may be passed to a function that filters sensitive data to the data set, and the GET request method may then be applied to the output of the function. In this manner, owners of objects on an object storage service are provided with greater control of objects stored or retrieved from the service.

CROSS-REFERENCE TO RELATED APPLICATION

This application is a continuation of U.S. patent application Ser. No.16/586,562, filed Sep. 27, 2019 and titled ON-DEMAND EXECUTION OF OBJECTTRANSFORMATION CODE IN OUTPUT PATH OF OBJECT STORAGE SERVICE, which isincorporated by reference herein and made a part of this specification.

INCORPORATION BY REFERENCE

This following U.S. Patent Applications are incorporated by referenceherein and made a part of this specification:

U.S. App. No. Title Filing Date 16/586,619 EXECUTION OF OWNER-SPECIFIEDCODE DURING Sep. 27, 2019 INPUT/OUTPUT PATH TO OBJECT STORAGE SERVICE16/586,704 INSERTING OWNER-SPECIFIED DATA PROCESSING Sep. 27, 2019PIPELINES INTO INPUT/OUTPUT PATH OF OBJECT STORAGE SERVICE 16/586,673INSERTING EXECUTIONS OF OWNER-SPECIFIED CODE Sep. 27, 2019 INTOINPUT/OUTPUT PATH OF OBJECT STORAGE SERVICE 16/586,580 ON-DEMANDEXECUTION OF OBJECT COMBINATION CODE Sep. 27, 2019 IN OUTPUT PATH OFOBJECT STORAGE SERVICE 16/586,539 ON-DEMAND EXECUTION OF OBJECT FILTERCODE IN Sep. 27, 2019 OUTPUT PATH OF OBJECT STORAGE SERVICE 16/586,825ON-DEMAND CODE EXECUTION IN INPUT PATH OF DATA Sep. 27, 2019 UPLOADED TOSTORAGE SERVICE IN MULTIPLE DATA PORTIONS 16/586,816 ON-DEMAND CODEOBFUSCATION OF DATA IN INPUT Sep. 27, 2019 PATH OF OBJECT STORAGESERVICE 16/586,818 ON-DEMAND INDEXING OF DATA IN INPUT PATH OF Sep. 27,2019 OBJECT STORAGE SERVICE 16/586,647 DATA ACCESS CONTROL SYSTEM FOROBJECT STORAGE Sep. 27, 2019 SERVICE BASED ON OWNER-DEFINED CODE16/586,659 USER-SPECIFIC DATA MANIPULATION SYSTEM FOR Sep. 27, 2019OBJECT STORAGE SERVICE BASED ON USER-SUBMITTED CODE 16/586,686 CODEEXECUTION ENVIRONMENT CUSTOMIZATION Sep. 27, 2019 SYSTEM FOR OBJECTSTORAGE SERVICE 16/586,626 EXECUTION OF USER-SUBMITTED CODE ON A STREAMOF Sep. 27, 2019 DATA 16/586,694 SEQUENTIAL EXECUTION OF USER-SUBMITTEDCODE AND Sep. 27, 2019 NATIVE FUNCTIONS

BACKGROUND

Computing devices can utilize communication networks to exchange data.Companies and organizations operate computer networks that interconnecta number of computing devices to support operations or to provideservices to third parties. The computing devices can be located in asingle geographic location or located in multiple, distinct geographiclocations (e.g., interconnected via private or public communicationnetworks). Specifically, data centers or data processing centers, hereingenerally referred to as a “data center,” may include a number ofinterconnected computing systems to provide computing resources to usersof the data center. The data centers may be private data centersoperated on behalf of an organization or public data centers operated onbehalf, or for the benefit of, the general public.

To facilitate increased utilization of data center resources,virtualization technologies allow a single physical computing device tohost one or more instances of virtual machines that appear and operateas independent computing devices to users of a data center. Withvirtualization, the single physical computing device can create,maintain, delete, or otherwise manage virtual machines in a dynamicmanner. In turn, users can request computer resources from a datacenter, including single computing devices or a configuration ofnetworked computing devices, and be provided with varying numbers ofvirtual machine resources.

In addition to computational resources, data centers provide a number ofother beneficial services to client devices. For example, data centersmay provide data storage services configured to store data submitted byclient devices, and enable retrieval of that data over a network. Avariety of types of data storage services can be provided, often varyingaccording to their input/output (I/O) mechanisms. For example, databaseservices may allow I/O based on a database query language, such as theStructured Query Language (SQL). Block storage services may allow I/Obased on modification to one or more defined-length blocks, in a mannersimilar to how an operating system interacts with local storage, and maythus facilitate virtualized disk drives usable, for example, to store anoperating system of a virtual machine. Object storage services may allowI/O at the level of individual objects or resources, such as individualfiles, which may vary in content and length. For example, an objectstorage service may provide an interface compliant with theRepresentational State Transfer (REST) architectural style, such as byallowing I/O based on calls designating input data and a hypertexttransport protocol request method (e.g., GET, PUT, POST, DELETE, etc.)to be applied to that data. By transmitting a call designating inputdata and a request method, a client can thus retrieve the data from anobject storage service, write the data to the object storage service asa new object, modify an existing object, etc.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram depicting an illustrative environment in whichan object storage service can operate in conjunction with an on-demandcode execution system to implement functions in connection withinput/output (I/O) requests to the object storage service.

FIG. 2 depicts a general architecture of a computing device providing afrontend of the object storage service of FIG. 1 .

FIG. 3 is a flow diagram depicting illustrative interactions forenabling a client device to modify an I/O path for the object storageservice by insertion of a function implemented by execution of a task onthe on-demand code execution system.

FIG. 4 is an illustrative visualization of a pipeline of functions to beapplied to an I/O path for the object storage service of FIG. 1 .

FIGS. 5A-5B show a flow diagram depicting illustrative interactions forhandling a request to store input data as an object on the objectstorage service of FIG. 1 , including execution of an owner-specifiedtask to the input data and storage of output of the task as the object.

FIGS. 6A-6B show a flow diagram depicting illustrative interactions forhandling a request to retrieve data of an object on the object storageservice of FIG. 1 , including execution of an owner-specified task tothe object and transmission of an output of the task to a requestingdevice as the object.

FIG. 7 is a flow chart depicting an illustrative routine forimplementing owner-defined functions in connection with an I/O requestobtained at the object storage service of FIG. 1 over an I/O path.

FIG. 8 is a flow chart depicting an illustrative routine for executing atask on the on-demand code execution system of FIG. 1 to enable datamanipulations during implementation of an owner-defined function.

FIG. 9 is a flow chart depicting an illustrative routine for executing atask on the on-demand code execution system of FIG. 1 to respond to adata object request using a combination of multiple data objects.

FIG. 10 is a system diagram of illustrative data flows and interactionsbetween various components of the service provider system in connectionwith the routine illustrated in FIG. 9 .

FIG. 11 is a flow chart depicting an illustrative routine for executinga task on the on-demand code execution system of FIG. 1 to respond to adata object request using selectively-obfuscated data.

FIG. 12 is a system diagram of illustrative data flows and interactionsbetween various components of the service provider system in connectionwith the routine illustrated in FIG. 11 .

FIG. 13 is a flow chart depicting an illustrative routine for executinga task on the on-demand code execution system of FIG. 1 to respond to adata object request using a dynamically-determined subset of requesteddata.

FIG. 14 is a system diagram of illustrative data flows and interactionsbetween various components of the service provider system in connectionwith the routine illustrated in FIG. 13 .

DETAILED DESCRIPTION

Generally described, aspects of the present disclosure relate tohandling requests to read or write to data objects on an object storagesystem. More specifically, aspects of the present disclosure relate tomodification of an input/output (I/O) path for an object storageservice, such that one or more data manipulations can be inserted intothe I/O path to modify the data to which a called request method isapplied, without requiring a calling client device to specify such datamanipulations. In one embodiment, data manipulations occur throughexecution of user-submitted code, which may be provided for example byan owner of a collection of data objects on an object storage system inorder to control interactions with that data object. For example, incases where an owner of an object collection wishes to ensure that endusers do not submit objects to the collection including any personallyidentifying information (to ensure end user's privacy), the owner maysubmit code executable to strip such information from a data input. Theowner may further specify that such code should be executed during eachwrite of a data object to the collection. Accordingly, when an end userattempts to write input data to the collection as a data object (e.g.,via an HTTP PUT method), the code may be first executed against theinput data, and resulting output data may be written to the collectionas the data object. Notably, this may result in the operation requestedby the end user—such as a write operation—being applied not to the enduser's input data, but instead to the data output by the datamanipulation (e.g., owner-submitted) code. In this way, owners of datacollections control I/O to those collections without relying on endusers to comply with owner requirements. Indeed, end users (or any otherclient device) may be unaware that modifications to I/O are occurring.As such, embodiments of the present disclosure enable modification ofI/O to an object storage service without modification of an interface tothe service, ensuring inter-compatibility with other pre-existingsoftware utilizing the service.

In some embodiments of the present disclosure, data manipulations mayoccur on an on-demand code execution system, sometimes referred to as aserverless execution system. Generally described, on-demand codeexecution systems enable execution of arbitrary user-designated code,without requiring the user to create, maintain, or configure anexecution environment (e.g., a physical or virtual machine) in which thecode is executed. For example, whereas conventional computing servicesoften require a user to provision a specific device (virtual orphysical), install an operating system on the device, configureapplication, define network interfaces, and the like, an on-demand codeexecution system may enable a user to submit code and may provide to theuser an application programming interface (API) that, when used, enablesthe user to request execution of the code. On receiving a call throughthe API, the on-demand code execution system may generate an executionenvironment for the code, provision the environment with the code,execute the code, and provide a result. Thus, an on-demand codeexecution system can remove a need for a user to handle configurationand management of environments for code execution. Example techniquesfor implementing an on-demand code execution system are disclosed, forexample, within U.S. Pat. No. 9,323,556, entitled “PROGRAMMATIC EVENTDETECTION AND MESSAGE GENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE,”and filed Sep. 30, 2014 (the “'556 patent”), the entirety of which ishereby incorporated by reference.

Due to the flexibility of on-demand code execution system to executearbitrary code, such a system can be used to create a variety of networkservices. For example, such a system could be used to create a“micro-service,” a network service that implements a small number offunctions (or only one function), and that interacts with other servicesto provide an application. In the context of on-demand code executionsystems, the code executed to create such a service is often referred toas a “function” or a “task,” which can be executed to implement theservice. Accordingly, one technique for performing data manipulationswithin the I/O path of an object storage service may be to create a taskon an on-demand code execution system that, when executed, performs therequired data manipulation. Illustratively, the task could provide aninterface similar or identical to that of the object storage service,and be operable to obtain input data in response to a request methodcall (e.g., HTTP PUT or GET calls), execute the code of the task againstthe input data, and perform a call to the object storage service forimplementation of the request method on resulting output data. Adownside of this technique is a complexity. For example, end users mightbe required under this scenario to submit I/O requests to the on-demandcode execution system, rather than the object storage service, to ensureexecution of the task. Should an end user submit a call directly to theobject storage service, task execution may not occur, and thus an ownerwould not be enabled to enforce a desired data manipulation for anobject collection. In addition, this technique may require that code ofa task be authored to both provide an interface to end users thatenables handling of calls to implement request methods on input data,and an interface that enables performance of calls from the taskexecution to the object storage service. Implementation of these networkinterfaces may significantly increase the complexity of the requiredcode, thus disincentivizing owners of data collections from using thistechnique. Moreover, where user-submitted code directly implementsnetwork communication, that code may need to be varied according to therequest method handled. For example, a first set of code may be requiredto support GET operations, a second set of code may be required tosupport PUT operations, etc. Because embodiments of the presentdisclosure relieve the user-submitted code of the requirement ofhandling network communications, one set of code may in some cases beenabled to handle multiple request methods.

To address the above-noted problems, embodiments of the presentdisclosure can enable strong integration of serverless task executionswith interfaces of an object storage service, such that the serviceitself is configured to invoke a task execution on receiving an I/Orequest to a data collection. Moreover, generation of code to performdata manipulations may be simplified by configuring the object storageservice to facilitate data input and output from a task execution,without requiring the task execution to itself implement networkcommunications for I/O operations. Specifically, an object storageservice and on-demand code execution system can be configured in oneembodiment to “stage” input data to a task execution in the form of ahandle (e.g., a POSIX-compliant descriptor) to an operating-system-levelinput/output stream, such that code of a task can manipulate the inputdata via defined-stream operations (e.g., as if the data existed withina local file system). This stream-level access to input data can becontrasted, for example, with network-level access of input data, whichgenerally requires that code implement network communication to retrievethe input data. Similarly, the object storage service and on-demand codeexecution system can be configured to provide an output stream handlerepresenting an output stream to which a task execution may writeoutput. On detecting writes to the output stream, the object storageservice and on-demand code execution system may handle such writes asoutput data of the task execution, and apply a called request method tothe output data. By enabling a task to manipulate data based on inputand output streams passed to the task, as opposed to requiring the codeto handle data communications over a network, the code of the task canbe greatly simplified.

Another benefit of enabling a task to manipulate data based on input andoutput handles is increased security. A general-use on-demand codeexecution system may operate permissively with respect to networkcommunications from a task execution, enabling any network communicationfrom the execution unless such communication is explicitly denied. Thispermissive model is reflective of the use of task executions asmicro-services, which often require interaction with a variety of othernetwork services. However, this permissive model also decreases securityof the function, since potentially malicious network communications canalso reach the execution. In contrast to a permissive model, taskexecutions used to perform data manipulations on an object storagesystem's I/O path can utilize a restrictive model, whereby onlyexplicitly-allowed network communications can occur from an environmentexecuting a task. Illustratively, because data manipulation can occurvia input and output handles, it is envisioned that many or most tasksused to perform data manipulation in embodiments of the presentdisclosure would require no network communications to occur at all,greatly increasing security of such an execution. Where a task executiondoes require some network communications, such as to contact an externalservice to assist with a data manipulation, such communications can beexplicitly allowed, or “whitelisted,” thus exposing the execution inonly a strictly limited manner.

In some embodiments, a data collection owner may require only a singledata manipulation to occur with respect to I/O to the collection.Accordingly, the object storage service may detect I/O to thecollection, implement the data manipulation (e.g., by executing aserverless task within an environment provisioned with input and outputhandles), and apply the called request method to the resulting outputdata. In other embodiments, an owner may request multiple datamanipulations occur with respect to an I/O path. For example, toincrease portability and reusability, an owner may author multipleserverless tasks, which may be combined in different manners ondifferent I/O paths. Thus, for each path, the owner may define a seriesof serverless tasks to be executed on I/O to the path. Moreover, in someconfigurations, an object storage system may natively provide one ormore data manipulations. For example, an object storage system maynatively accept requests for only portions of an object (e.g., of adefined byte range), or may natively enable execution of queries againstdata of an object (e.g., SQL queries). In some embodiments, anycombination of various native manipulations and serverless task-basedmanipulations may be specified for a given I/O path. For example, anowner may specify that, for a particular request to read an object, agiven SQL query be executed against the object, the output of which isprocessed via a first task execution, the output of which is processedvia a second task execution, etc. The collection of data manipulations(e.g., native manipulations, serverless task-based manipulations, or acombination thereof) applied to an I/O path is generally referred toherein as a data processing “pipeline” applied to the I/O path.

In accordance with aspects of the present disclosure, a particular pathmodification (e.g., the addition of a pipeline) applied to an I/O pathmay vary according to attributes of the path, such as a client devicefrom which an I/O request originates or an object or collection ofobjects within the request. For example, pipelines may be applied toindividual objects, such that the pipeline is applied to all I/Orequests for the object, or a pipeline may be selectively applied onlywhen certain client devices access the object. In some instances, anobject storage service may provide multiple I/O paths for an object orcollection. For example, the same object or collection may be associatedwith multiple resource identifiers on the object storage service, suchthat the object or collection can be accessed through the multipleidentifiers (e.g., uniform resource identifiers, or URIs), whichillustratively correspond to different network-accessible endpoints. Inone embodiment, different pipelines may be applied to each I/O path fora given object. For example, a first I/O path may be associated withunprivileged access to a data set, and thus be subject to datamanipulations that remove confidential information from the data setprior during retrieval. A second I/O path may be associated withprivileged access, and thus not be subject to those data manipulations.In some instances, pipelines may be selectively applied based on othercriteria. For example, whether a pipeline is applied may be based ontime of day, a number or rate of accesses to an object or collection,etc.

As will be appreciated by one of skill in the art in light of thepresent disclosure, the embodiments disclosed herein improve the abilityof computing systems, such as object storage systems, to provide andenforce data manipulation functions against data objects. Whereas priortechniques generally depend on external enforcement of data manipulationfunctions (e.g., requesting that users strip personal information beforeuploading it), embodiments of the present disclosure enable directinsertion of data manipulation into an I/O path for the object storagesystem. Moreover, embodiments of the present disclosure provide a securemechanism for implementing data manipulations, by providing forserverless execution of manipulation functions within an isolatedexecution environment. Embodiments of the present disclosure furtherimprove operation of serverless functions, by enabling such functions tooperate on the basis of local stream (e.g., “file”) handles, rather thanrequiring that functions act as network-accessible services. Thepresently disclosed embodiments therefore address technical problemsinherent within computing systems, such as the difficulty of enforcingdata manipulations at storage systems and the complexity of creatingexternal services to enforce such data manipulations. These technicalproblems are addressed by the various technical solutions describedherein, including the insertion of data processing pipelines into an I/Opath for an object or object collection, potentially without knowledgeof a requesting user, the use of serverless functions to perform aspectsof such pipelines, and the use of local stream handles to enablesimplified creation of serverless functions. Thus, the presentdisclosure represents an improvement on existing data processing systemsand computing systems in general.

The general execution of tasks on the on-demand code execution systemwill now be discussed. As described in detail herein, the on-demand codeexecution system may provide a network-accessible service enabling usersto submit or designate computer-executable source code to be executed byvirtual machine instances on the on-demand code execution system. Eachset of code on the on-demand code execution system may define a “task,”and implement specific functionality corresponding to that task whenexecuted on a virtual machine instance of the on-demand code executionsystem. Individual implementations of the task on the on-demand codeexecution system may be referred to as an “execution” of the task (or a“task execution”). In some cases, the on-demand code execution systemmay enable users to directly trigger execution of a task based on avariety of potential events, such as transmission of an applicationprogramming interface (“API”) call to the on-demand code executionsystem, or transmission of a specially formatted hypertext transportprotocol (“HTTP”) packet to the on-demand code execution system. Inaccordance with embodiments of the present disclosure, the on-demandcode execution system may further interact with an object storagesystem, in order to execute tasks during application of a datamanipulation pipeline to an I/O path. The on-demand code executionsystem can therefore execute any specified executable code “on-demand,”without requiring configuration or maintenance of the underlyinghardware or infrastructure on which the code is executed. Further, theon-demand code execution system may be configured to execute tasks in arapid manner (e.g., in under 100 milliseconds [ms]), thus enablingexecution of tasks in “real-time” (e.g., with little or no perceptibledelay to an end user). To enable this rapid execution, the on-demandcode execution system can include one or more virtual machine instancesthat are “pre-warmed” or pre-initialized (e.g., booted into an operatingsystem and executing a complete or substantially complete runtimeenvironment) and configured to enable execution of user-defined code,such that the code may be rapidly executed in response to a request toexecute the code, without delay caused by initializing the virtualmachine instance. Thus, when an execution of a task is triggered, thecode corresponding to that task can be executed within a pre-initializedvirtual machine in a very short amount of time.

Specifically, to execute tasks, the on-demand code execution systemdescribed herein may maintain a pool of executing virtual machineinstances that are ready for use as soon as a request to execute a taskis received. Due to the pre-initialized nature of these virtualmachines, delay (sometimes referred to as latency) associated withexecuting the task code (e.g., instance and language runtime startuptime) can be significantly reduced, often to sub-100 millisecond levels.Illustratively, the on-demand code execution system may maintain a poolof virtual machine instances on one or more physical computing devices,where each virtual machine instance has one or more software components(e.g., operating systems, language runtimes, libraries, etc.) loadedthereon. When the on-demand code execution system receives a request toexecute program code (a “task”), the on-demand code execution system mayselect a virtual machine instance for executing the program code of theuser based on the one or more computing constraints related to the task(e.g., a required operating system or runtime) and cause the task to beexecuted on the selected virtual machine instance. The tasks can beexecuted in isolated containers that are created on the virtual machineinstances, or may be executed within a virtual machine instance isolatedfrom other virtual machine instances acting as environments for othertasks. Since the virtual machine instances in the pool have already beenbooted and loaded with particular operating systems and languageruntimes by the time the requests are received, the delay associatedwith finding compute capacity that can handle the requests (e.g., byexecuting the user code in one or more containers created on the virtualmachine instances) can be significantly reduced.

As used herein, the term “virtual machine instance” is intended to referto an execution of software or other executable code that emulateshardware to provide an environment or platform on which software mayexecute (an example “execution environment”). Virtual machine instancesare generally executed by hardware devices, which may differ from thephysical hardware emulated by the virtual machine instance. For example,a virtual machine may emulate a first type of processor and memory whilebeing executed on a second type of processor and memory. Thus, virtualmachines can be utilized to execute software intended for a firstexecution environment (e.g., a first operating system) on a physicaldevice that is executing a second execution environment (e.g., a secondoperating system). In some instances, hardware emulated by a virtualmachine instance may be the same or similar to hardware of an underlyingdevice. For example, a device with a first type of processor mayimplement a plurality of virtual machine instances, each emulating aninstance of that first type of processor. Thus, virtual machineinstances can be used to divide a device into a number of logicalsub-devices (each referred to as a “virtual machine instance”). Whilevirtual machine instances can generally provide a level of abstractionaway from the hardware of an underlying physical device, thisabstraction is not required. For example, assume a device implements aplurality of virtual machine instances, each of which emulate hardwareidentical to that provided by the device. Under such a scenario, eachvirtual machine instance may allow a software application to executecode on the underlying hardware without translation, while maintaining alogical separation between software applications running on othervirtual machine instances. This process, which is generally referred toas “native execution,” may be utilized to increase the speed orperformance of virtual machine instances. Other techniques that allowdirect utilization of underlying hardware, such as hardware pass-throughtechniques, may be used, as well.

While a virtual machine executing an operating system is describedherein as one example of an execution environment, other executionenvironments are also possible. For example, tasks or other processesmay be executed within a software “container,” which provides a runtimeenvironment without itself providing virtualization of hardware.Containers may be implemented within virtual machines to provideadditional security, or may be run outside of a virtual machineinstance.

The foregoing aspects and many of the attendant advantages of thisdisclosure will become more readily appreciated as the same becomebetter understood by reference to the following description, when takenin conjunction with the accompanying drawings.

FIG. 1 is a block diagram of an illustrative operating environment 100in which a service provider system 110 operates to enable client devices102 to perform I/O operations on objects stored within an object storageservice 160 and to apply path modifications to such I/O operations,which modifications may include execution of user-defined code on anon-demand code execution system 120.

By way of illustration, various example client devices 102 are shown incommunication with the service provider system 110, including a desktopcomputer, laptop, and a mobile phone. In general, the client devices 102can be any computing device such as a desktop, laptop or tabletcomputer, personal computer, wearable computer, server, personal digitalassistant (PDA), hybrid PDA/mobile phone, mobile phone, electronic bookreader, set-top box, voice command device, camera, digital media player,and the like.

Generally described, the object storage service 160 can operate toenable clients to read, write, modify, and delete data objects, each ofwhich represents a set of data associated with an identifier (an “objectidentifier” or “resource identifier”) that can be interacted with as anindividual resource. For example, an object may represent a single filesubmitted by a client device 102 (though the object storage service 160may or may not store such an object as a single file). This object-levelinteraction can be contrasted with other types of storage services, suchas block-based storage services providing data manipulation at the levelof individual blocks or database storage services providing datamanipulation at the level of tables (or parts thereof) or the like.

The object storage service 160 illustratively includes one or morefrontends 162, which provide an interface (a command-line interface(CLIs), application programing interface (APIs), or other programmaticinterface) through which client devices 102 can interface with theservice 160 to configure the service 160 on their behalf and to performI/O operations on the service 160. For example, a client device 102 mayinteract with a frontend 162 to create a collection of data objects onthe service 160 (e.g., a “bucket” of objects) and to configurepermissions for that collection. Client devices 102 may thereaftercreate, read, update, or delete objects within the collection based onthe interfaces of the frontends 162. In one embodiment, the frontend 162provides a REST-compliant HTTP interface supporting a variety of requestmethods, each of which corresponds to a requested I/O operation on theservice 160. By way of non-limiting example, request methods mayinclude:

-   -   a GET operation requesting retrieval of an object stored on the        service 160 by reference to an identifier of the object;    -   a PUT operation requesting storage of an object to be stored on        the service 160, including an identifier of the object and input        data to be stored as the object;    -   a DELETE operation requesting deletion of an object stored on        the service 160 by reference to an identifier of the object; and    -   a LIST operation requesting listing of objects within an object        collection stored on the service 160 by reference to an        identifier of the collection.        A variety of other operations may also be supported. For        example, the service 160 may provide a POST operation similar to        a PUT operation but associated with a different upload mechanism        (e.g., a browser-based HTML upload), or a HEAD operation        enabling retrieval of metadata for an object without retrieving        the object itself. In some embodiments, the service 160 may        enable operations that combine one or more of the above        operations, or combining an operation with a native data        manipulation. For example, the service 160 may provide a COPY        operation enabling copying of an object stored on the service        160 to another object, which operation combines a GET operation        with a PUT operation. As another example, the service 160 may        provide a SELECT operation enabling specification of an SQL        query to be applied to an object prior to returning the contents        of that object, which combines an application of an SQL query to        a data object (a native data manipulation) with a GET operation.        As yet another example, the service 160 may provide a “byte        range” GET, which enables a GET operation on only a portion of a        data object. In some instances, the operation requested by a        client device 102 on the service 160 may be transmitted to the        service via an HTTP request, which itself may include an HTTP        method. In some cases, such as in the case of a GET operation,        the HTTP method specified within the request may match the        operation requested at the service 160. However, in other cases,        the HTTP method of a request may not match the operation        requested at the service 160. For example, a request may utilize        an HTTP POST method to transmit a request to implement a SELECT        operation at the service 160.

During general operation, frontends 162 may be configured to obtain acall to a request method, and apply that request method to input datafor the method. For example, a frontend 162 can respond to a request toPUT input data into the service 160 as an object by storing that inputdata as the object on the service 160. Objects may be stored, forexample, on object data stores 168, which correspond to any persistentor substantially persistent storage (including hard disk drives (HDDs),solid state drives (SSDs), network accessible storage (NAS), storagearea networks (SANs), non-volatile random access memory (NVRAM), or anyof a variety of storage devices known in the art). As a further example,the frontend 162 can respond to a request to GET an object from theservice 160 by retrieving the object from the stores 168 (the objectrepresenting input data to the GET resource request), and returning theobject to a requesting client device 102.

In some cases, calls to a request method may invoke one or more nativedata manipulations provided by the service 160. For example, a SELECToperation may provide an SQL-formatted query to be applied to an object(also identified within the request), or a GET operation may provide aspecific range of bytes of an object to be returned. The service 160illustratively includes an object manipulation engine 170 configured toperform native data manipulations, which illustratively corresponds to adevice configured with software executable to implement native datamanipulations on the service 160 (e.g., by stripping non-selected bytesfrom an object for a byte-range GET, by applying an SQL query to anobject and returning results of the query, etc.).

In accordance with embodiments of the present disclosure, the service160 can further be configured to enable modification of an I/O path fora given object or collection of objects, such that a called requestmethod is applied to an output of a data manipulation function, ratherthan the resource identified within the call. For example, the service160 may enable a client device 102 to specify that GET operations for agiven object should be subject to execution of a user-defined task onthe on-demand code execution system 120, such that the data returned inresponse to the operation is the output of a task execution rather thanthe requested object. Similarly, the service 160 may enable a clientdevice 102 to specify that PUT operations to store a given object shouldbe subject to execution of a user-defined task on the on-demand codeexecution system 120, such that the data stored in response to theoperation is the output of a task execution rather than the dataprovided for storage by a client device 102. As will be discussed inmore detail below, path modifications may include specification of apipeline of data manipulations, including native data manipulations,task-based manipulations, or combinations thereof. Illustratively, aclient device 102 may specify a pipeline or other data manipulation foran object or object collection through the frontend 162, which may storea record of the pipeline or manipulation in the I/O path modificationdata store 164, which store 164, like the object data stores 168, canrepresent any persistent or substantially persistent storage. Whileshown as distinct in FIG. 1 , in some instances the data stores 164 and168 may represent a single collection of data stores. For example, datamodifications to objects or collections may themselves be stored asobjects on the service 160.

To enable data manipulation via execution of user-defined code, thesystem further includes an on-demand code execution system 120. In oneembodiment, the system 120 is solely usable by the object storageservice 160 in connection with data manipulations of an I/O path. Inanother embodiment, the system 120 is additionally accessible by clientdevices 102 to directly implement serverless task executions. Forexample, the on-demand code execution system 120 may provide the service160 (and potentially client devices 102) with one or more userinterfaces, command-line interfaces (CLIs), application programinginterfaces (APIs), or other programmatic interfaces for generating anduploading user-executable code (e.g., including metadata identifyingdependency code objects for the uploaded code), invoking theuser-provided code (e.g., submitting a request to execute the user codeson the on-demand code execution system 120), scheduling event-based jobsor timed jobs, tracking the user-provided code, or viewing other loggingor monitoring information related to their requests or user codes.Although one or more embodiments may be described herein as using a userinterface, it should be appreciated that such embodiments may,additionally or alternatively, use any CLIs, APIs, or other programmaticinterfaces.

The client devices 102, object storage service 160, and on-demand codeexecution system 120 may communicate via a network 104, which mayinclude any wired network, wireless network, or combination thereof. Forexample, the network 104 may be a personal area network, local areanetwork, wide area network, over-the-air broadcast network (e.g., forradio or television), cable network, satellite network, cellulartelephone network, or combination thereof. As a further example, thenetwork 104 may be a publicly accessible network of linked networks,possibly operated by various distinct parties, such as the Internet. Insome embodiments, the network 104 may be a private or semi-privatenetwork, such as a corporate or university intranet. The network 104 mayinclude one or more wireless networks, such as a Global System forMobile Communications (GSM) network, a Code Division Multiple Access(CDMA) network, a Long Term Evolution (LTE) network, or any other typeof wireless network. The network 104 can use protocols and componentsfor communicating via the Internet or any of the other aforementionedtypes of networks. For example, the protocols used by the network 104may include Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS),Message Queue Telemetry Transport (MQTT), Constrained ApplicationProtocol (CoAP), and the like. Protocols and components forcommunicating via the Internet or any of the other aforementioned typesof communication networks are well known to those skilled in the artand, thus, are not described in more detail herein.

To enable interaction with the on-demand code execution system 120, thesystem 120 includes one or more frontends 130, which enable interactionwith the on-demand code execution system 120. In an illustrativeembodiment, the frontends 130 serve as a “front door” to the otherservices provided by the on-demand code execution system 120, enablingusers (via client devices 102) or the service 160 to provide, requestexecution of, and view results of computer executable code. Thefrontends 130 include a variety of components to enable interactionbetween the on-demand code execution system 120 and other computingdevices. For example, each frontend 130 may include a request interfaceproviding client devices 102 and the service 160 with the ability toupload or otherwise communication user-specified code to the on-demandcode execution system 120 and to thereafter request execution of thatcode. In one embodiment, the request interface communicates withexternal computing devices (e.g., client devices 102, frontend 162,etc.) via a graphical user interface (GUI), CLI, or API. The frontends130 process the requests and make sure that the requests are properlyauthorized. For example, the frontends 130 may determine whether theuser associated with the request is authorized to access the user codespecified in the request.

References to user code as used herein may refer to any program code(e.g., a program, routine, subroutine, thread, etc.) written in aspecific program language. In the present disclosure, the terms “code,”“user code,” and “program code,” may be used interchangeably. Such usercode may be executed to achieve a specific function, for example, inconnection with a particular data transformation developed by the user.As noted above, individual collections of user code (e.g., to achieve aspecific function) are referred to herein as “tasks,” while specificexecutions of that code (including, e.g., compiling code, interpretingcode, or otherwise making the code executable) are referred to as “taskexecutions” or simply “executions.” Tasks may be written, by way ofnon-limiting example, in JavaScript (e.g., node.js), Java, Python, orRuby (or another programming language).

To manage requests for code execution, the frontend 130 can include anexecution queue, which can maintain a record of requested taskexecutions. Illustratively, the number of simultaneous task executionsby the on-demand code execution system 120 is limited, and as such, newtask executions initiated at the on-demand code execution system 120(e.g., via an API call, via a call from an executed or executing task,etc.) may be placed on the execution queue and processed, e.g., in afirst-in-first-out order. In some embodiments, the on-demand codeexecution system 120 may include multiple execution queues, such asindividual execution queues for each user account. For example, users ofthe service provider system 110 may desire to limit the rate of taskexecutions on the on-demand code execution system 120 (e.g., for costreasons). Thus, the on-demand code execution system 120 may utilize anaccount-specific execution queue to throttle the rate of simultaneoustask executions by a specific user account. In some instances, theon-demand code execution system 120 may prioritize task executions, suchthat task executions of specific accounts or of specified prioritiesbypass or are prioritized within the execution queue. In otherinstances, the on-demand code execution system 120 may execute tasksimmediately or substantially immediately after receiving a call for thattask, and thus, the execution queue may be omitted.

The frontend 130 can further include an output interface configured tooutput information regarding the execution of tasks on the on-demandcode execution system 120. Illustratively, the output interface maytransmit data regarding task executions (e.g., results of a task, errorsrelated to the task execution, or details of the task execution, such astotal time required to complete the execution, total data processed viathe execution, etc.) to the client devices 102 or the object storageservice 160.

In some embodiments, the on-demand code execution system 120 may includemultiple frontends 130. In such embodiments, a load balancer may beprovided to distribute the incoming calls to the multiple frontends 130,for example, in a round-robin fashion. In some embodiments, the mannerin which the load balancer distributes incoming calls to the multiplefrontends 130 may be based on the location or state of other componentsof the on-demand code execution system 120. For example, a load balancermay distribute calls to a geographically nearby frontend 130, or to afrontend with capacity to service the call. In instances where eachfrontend 130 corresponds to an individual instance of another componentof the on-demand code execution system 120, such as the active pool 148described below, the load balancer may distribute calls according to thecapacities or loads on those other components. Calls may in someinstances be distributed between frontends 130 deterministically, suchthat a given call to execute a task will always (or almost always) berouted to the same frontend 130. This may, for example, assist inmaintaining an accurate execution record for a task, to ensure that thetask executes only a desired number of times. For example, calls may bedistributed to load balance between frontends 130. Other distributiontechniques, such as anycast routing, will be apparent to those of skillin the art.

The on-demand code execution system 120 further includes one or moreworker managers 140 that manage the execution environments, such asvirtual machine instances 150 (shown as VM instance 150A and 150B,generally referred to as a “VM”), used for servicing incoming calls toexecute tasks. While the following will be described with reference tovirtual machine instances 150 as examples of such environments,embodiments of the present disclosure may utilize other environments,such as software containers. In the example illustrated in FIG. 1 , eachworker manager 140 manages an active pool 148, which is a group(sometimes referred to as a pool) of virtual machine instances 150executing on one or more physical host computing devices that areinitialized to execute a given task (e.g., by having the code of thetask and any dependency data objects loaded into the instance).

Although the virtual machine instances 150 are described here as beingassigned to a particular task, in some embodiments, the instances may beassigned to a group of tasks, such that the instance is tied to thegroup of tasks and any tasks of the group can be executed within theinstance. For example, the tasks in the same group may belong to thesame security group (e.g., based on their security credentials) suchthat executing one task in a container on a particular instance 150after another task has been executed in another container on the sameinstance does not pose security risks. As discussed below, a task may beassociated with permissions encompassing a variety of aspectscontrolling how a task may execute. For example, permissions of a taskmay define what network connections (if any) can be initiated by anexecution environment of the task. As another example, permissions of atask may define what authentication information is passed to a task,controlling what network-accessible resources are accessible toexecution of a task (e.g., objects on the service 160). In oneembodiment, a security group of a task is based on one or more suchpermissions. For example, a security group may be defined based on acombination of permissions to initiate network connections andpermissions to access network resources. As another example, the tasksof the group may share common dependencies, such that an environmentused to execute one task of the group can be rapidly modified to supportexecution of another task within the group.

Once a triggering event to execute a task has been successfullyprocessed by a frontend 130, the frontend 130 passes a request to aworker manager 140 to execute the task. In one embodiment, each frontend130 may be associated with a corresponding worker manager 140 (e.g., aworker manager 140 co-located or geographically nearby to the frontend130) and thus, the frontend 130 may pass most or all requests to thatworker manager 140. In another embodiment, a frontend 130 may include alocation selector configured to determine a worker manager 140 to whichto pass the execution request. In one embodiment, the location selectormay determine the worker manager 140 to receive a call based on hashingthe call, and distributing the call to a worker manager 140 selectedbased on the hashed value (e.g., via a hash ring). Various othermechanisms for distributing calls between worker managers 140 will beapparent to one of skill in the art.

Thereafter, the worker manager 140 may modify a virtual machine instance150 (if necessary) and execute the code of the task within the instance150. As shown in FIG. 1 , respective instances 150 may have operatingsystems (OS) 152 (shown as OS 152A and 152B), language runtimes 154(shown as runtime 154A and 154B), and user code 156 (shown as user code156A and 156B). The OS 152, runtime 154, and user code 156 maycollectively enable execution of the user code to implement the task.Thus, via operation of the on-demand code execution system 120, tasksmay be rapidly executed within an execution environment.

In accordance with aspects of the present disclosure, each VM 150additionally includes staging code 157 executable to facilitate stagingof input data on the VM 150 and handling of output data written on theVM 150, as well as a VM data store 158 accessible through a local filesystem of the VM 150. Illustratively, the staging code 157 represents aprocess executing on the VM 150 (or potentially a host device of the VM150) and configured to obtain data from the object storage service 160and place that data into the VM data store 158. The staging code 157 canfurther be configured to obtain data written to a file within the VMdata store 158, and to transmit that data to the object storage service160. Because such data is available at the VM data store 158, user code156 is not required to obtain data over a network, simplifying user code156 and enabling further restriction of network communications by theuser code 156, thus increasing security. Rather, as discussed above,user code 156 may interact with input data and output data as files onthe VM data store 158, by use of file handles passed to the code 156during an execution. In some embodiments, input and output data may bestored as files within a kernel-space file system of the data store 158.In other instances, the staging code 157 may provide a virtual filesystem, such as a filesystem in userspace (FUSE) interface, whichprovides an isolated file system accessible to the user code 156, suchthat the user code's access to the VM data store 158 is restricted.

As used herein, the term “local file system” generally refers to a filesystem as maintained within an execution environment, such that softwareexecuting within the environment can access data as file, rather thanvia a network connection. In accordance with aspects of the presentdisclosure, the data storage accessible via a local file system mayitself be local (e.g., local physical storage), or may be remote (e.g.,accessed via a network protocol, like NFS, or represented as avirtualized block device provided by a network-accessible service).Thus, the term “local file system” is intended to describe a mechanismfor software to access data, rather than physical location of the data.

The VM data store 158 can include any persistent or non-persistent datastorage device. In one embodiment, the VM data store 158 is physicalstorage of the host device, or a virtual disk drive hosted on physicalstorage of the host device. In another embodiment, the VM data store 158is represented as local storage, but is in fact a virtualized storagedevice provided by a network accessible service. For example, the VMdata store 158 may be a virtualized disk drive provided by anetwork-accessible block storage service. In some embodiments, theobject storage service 160 may be configured to provide file-levelaccess to objects stored on the data stores 168, thus enabling the VMdata store 158 to be virtualized based on communications between thestaging code 157 and the service 160. For example, the object storageservice 160 can include a file-level interface 166 providing networkaccess to objects within the data stores 168 as files. The file-levelinterface 166 may, for example, represent a network-based file systemserver (e.g., a network file system (NFS)) providing access to objectsas files, and the staging code 157 may implement a client of thatserver, thus providing file-level access to objects of the service 160.

In some instances, the VM data store 158 may represent virtualizedaccess to another data store executing on the same host device of a VMinstance 150. For example, an active pool 148 may include one or moredata staging VM instances (not shown in FIG. 1 ), which may beco-tenanted with VM instances 150 on the same host device. A datastaging VM instance may be configured to support retrieval and storageof data from the service 160 (e.g., data objects or portions thereof,input data passed by client devices 102, etc.), and storage of that dataon a data store of the data staging VM instance. The data staging VMinstance may, for example, be designated as unavailable to supportexecution of user code 156, and thus be associated with elevatedpermissions relative to instances 150 supporting execution of user code.The data staging VM instance may make this data accessible to other VMinstances 150 within its host device (or, potentially, on nearby hostdevices), such as by use of a network-based file protocol, like NFS.Other VM instances 150 may then act as clients to the data staging VMinstance, enabling creation of virtualized VM data stores 158 that, fromthe point of view of user code 156A, appear as local data stores.Beneficially, network-based access to data stored at a data staging VMcan be expected to occur very quickly, given the co-location of a datastaging VM and a VM instance 150 within a host device or on nearby hostdevices.

While some examples are provided herein with respect to use of IO streamhandles to read from or write to a VM data store 158, IO streams mayadditionally be used to read from or write to other interfaces of a VMinstance 150 (while still removing a need for user code 156 to conductoperations other than stream-level operations, such as creating networkconnections). For example, staging code 157 may “pipe” input data to anexecution of user code 156 as an input stream, the output of which maybe “piped” to the staging code 157 as an output stream. As anotherexample, a staging VM instance or a hypervisor to a VM instance 150 maypass input data to a network port of the VM instance 150, which may beread-from by staging code 157 and passed as an input stream to the usercode 157. Similarly, data written to an output stream by the task code156 may be written to a second network port of the instance 150A forretrieval by the staging VM instance or hypervisor. In yet anotherexample, a hypervisor to the instance 150 may pass input data as datawritten to a virtualized hardware input device (e.g., a keyboard) andstaging code 157 may pass to the user code 156 a handle to the IO streamcorresponding to that input device. The hypervisor may similarly pass tothe user code 156 a handle for an IO stream corresponding to anvirtualized hardware output device, and read data written to that streamas output data. Thus, the examples provided herein with respect to filestreams may generally be modified to relate to any IO stream.

The object storage service 160 and on-demand code execution system 120are depicted in FIG. 1 as operating in a distributed computingenvironment including several computer systems that are interconnectedusing one or more computer networks (not shown in FIG. 1 ). The objectstorage service 160 and on-demand code execution system 120 could alsooperate within a computing environment having a fewer or greater numberof devices than are illustrated in FIG. 1 . Thus, the depiction of theobject storage service 160 and on-demand code execution system 120 inFIG. 1 should be taken as illustrative and not limiting to the presentdisclosure. For example, the on-demand code execution system 120 orvarious constituents thereof could implement various Web servicescomponents, hosted or “cloud” computing environments, or peer to peernetwork configurations to implement at least a portion of the processesdescribed herein. In some instances, the object storage service 160 andon-demand code execution system 120 may be combined into a singleservice. Further, the object storage service 160 and on-demand codeexecution system 120 may be implemented directly in hardware or softwareexecuted by hardware devices and may, for instance, include one or morephysical or virtual servers implemented on physical computer hardwareconfigured to execute computer executable instructions for performingvarious features that will be described herein. The one or more serversmay be geographically dispersed or geographically co-located, forinstance, in one or more data centers. In some instances, the one ormore servers may operate as part of a system of rapidly provisioned andreleased computing resources, often referred to as a “cloud computingenvironment.”

In the example of FIG. 1 , the object storage service 160 and on-demandcode execution system 120 are illustrated as connected to the network104. In some embodiments, any of the components within the objectstorage service 160 and on-demand code execution system 120 cancommunicate with other components of the on-demand code execution system120 via the network 104. In other embodiments, not all components of theobject storage service 160 and on-demand code execution system 120 arecapable of communicating with other components of the virtualenvironment 100. In one example, only the frontends 130 and 162 (whichmay in some instances represent multiple frontends) may be connected tothe network 104, and other components of the object storage service 160and on-demand code execution system 120 may communicate with othercomponents of the environment 100 via the respective frontends 130 and162.

While some functionalities are generally described herein with referenceto an individual component of the object storage service 160 andon-demand code execution system 120, other components or a combinationof components may additionally or alternatively implement suchfunctionalities. For example, while the object storage service 160 isdepicted in FIG. 1 as including an object manipulation engine 170,functions of that engine 170 may additionally or alternatively beimplemented as tasks on the on-demand code execution system 120.Moreover, while the on-demand code execution system 120 is described asan example system to apply data manipulation tasks, other computesystems may be used to execute user-defined tasks, which compute systemsmay include more, fewer or different components than depicted as part ofthe on-demand code execution system 120. In a simplified example, theobject storage service 160 may include a physical computing deviceconfigured to execute user-defined tasks on demand, thus representing acompute system usable in accordance with embodiments of the presentdisclosure. Thus, the specific configuration of elements within FIG. 1is intended to be illustrative.

FIG. 2 depicts a general architecture of a frontend server 200 computingdevice implementing a frontend 162 of FIG. 1 . The general architectureof the frontend server 200 depicted in FIG. 2 includes an arrangement ofcomputer hardware and software that may be used to implement aspects ofthe present disclosure. The hardware may be implemented on physicalelectronic devices, as discussed in greater detail below. The frontendserver 200 may include many more (or fewer) elements than those shown inFIG. 2 . It is not necessary, however, that all of these generallyconventional elements be shown in order to provide an enablingdisclosure. Additionally, the general architecture illustrated in FIG. 2may be used to implement one or more of the other components illustratedin FIG. 1 .

As illustrated, the frontend server 200 includes a processing unit 290,a network interface 292, a computer readable medium drive 294, and aninput/output device interface 296, all of which may communicate with oneanother by way of a communication bus. The network interface 292 mayprovide connectivity to one or more networks or computing systems. Theprocessing unit 290 may thus receive information and instructions fromother computing systems or services via the network 104. The processingunit 290 may also communicate to and from primary memory 280 orsecondary memory 298 and further provide output information for anoptional display (not shown) via the input/output device interface 296.The input/output device interface 296 may also accept input from anoptional input device (not shown).

The primary memory 280 or secondary memory 298 may contain computerprogram instructions (grouped as units in some embodiments) that theprocessing unit 290 executes in order to implement one or more aspectsof the present disclosure. These program instructions are shown in FIG.2 as included within the primary memory 280, but may additionally oralternatively be stored within secondary memory 298. The primary memory280 and secondary memory 298 correspond to one or more tiers of memorydevices, including (but not limited to) RAM, 3D XPOINT memory, flashmemory, magnetic storage, and the like. The primary memory 280 isassumed for the purposes of description to represent a main workingmemory of the worker manager 140, with a higher speed but lower totalcapacity than secondary memory 298.

The primary memory 280 may store an operating system 284 that providescomputer program instructions for use by the processing unit 290 in thegeneral administration and operation of the frontend server 200. Thememory 280 may further include computer program instructions and otherinformation for implementing aspects of the present disclosure. Forexample, in one embodiment, the memory 280 includes a user interfaceunit 282 that generates user interfaces (or instructions therefor) fordisplay upon a computing device, e.g., via a navigation or browsinginterface such as a browser or application installed on the computingdevice.

In addition to or in combination with the user interface unit 282, thememory 280 may include a control plane unit 286 and data plane unit 288each executable to implement aspects of the present disclosure.Illustratively, the control plane unit 286 may include code executableto enable owners of data objects or collections of objects to attachmanipulations, serverless functions, or data processing pipelines to anI/O path, in accordance with embodiments of the present disclosure. Forexample, the control plane unit 286 may enable the frontend 162 toimplement the interactions of FIG. 3 . The data plane unit 288 mayillustratively include code enabling handling of I/O operations on theobject storage service 160, including implementation of manipulations,serverless functions, or data processing pipelines attached to an I/Opath (e.g., via the interactions of FIGS. 5A-6B, implementation of theroutines of FIGS. 7-8 , etc.).

The frontend server 200 of FIG. 2 is one illustrative configuration ofsuch a device, of which others are possible. For example, while shown asa single device, a frontend server 200 may in some embodiments beimplemented as multiple physical host devices. Illustratively, a firstdevice of such a frontend server 200 may implement the control planeunit 286, while a second device may implement the data plane unit 288.

While described in FIG. 2 as a frontend server 200, similar componentsmay be utilized in some embodiments to implement other devices shown inthe environment 100 of FIG. 1 . For example, a similar device mayimplement a worker manager 140, as described in more detail in U.S. Pat.No. 9,323,556, entitled “PROGRAMMATIC EVENT DETECTION AND MESSAGEGENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE,” and filed Sep. 30,2014 (the “'556 patent”), the entirety of which is hereby incorporatedby reference.

With reference to FIG. 3 , illustrative interactions are depicted forenabling a client device 102A to modify an I/O path for one or moreobjects on an object storage service 160 by inserting a datamanipulation into the I/O path, which manipulation is implemented withina task executable on the on-demand code execution system 120.

The interactions of FIG. 3 begin at (1), where the client device 102Aauthors the stream manipulation code. The code can illustrativelyfunction to access an input file handle provided on execution of theprogram (which may, for example, be represented by the standard inputstream for a program, commonly “stdin”), perform manipulations on dataobtained from that file handle, and write data to an output file handleprovided on execution of the program (which may, for example, byrepresented by the standard output stream for a program, commonly“stdout”).

While examples are discussed herein with respect to a “file” handle,embodiments of the present disclosure may utilize handles providingaccess to any operating-system-level input/output (IO) stream, examplesof which include byte streams, character streams, file streams, and thelike. As used herein, the term operating-system-level input/outputstream (or simply an “IO stream”) is intended to refer to a stream ofdata for which an operating system provides a defined set of functions,such as seeking within the stream, reading from a stream, and writing toa stream. Streams may be created in various manners. For example, aprogramming language may generate a stream by use of a function libraryto open a file on a local operating system, or a stream may be createdby use of a “pipe” operator (e.g., within an operating system shellcommand language). As will be appreciated by one skilled in the art,most general purpose programming languages include, as basicfunctionality of the code, the ability to interact with streams.

In accordance with embodiments of the present disclosure, task code maybe authored to accept, as a parameter of the code, an input handle andan output handle, both representing IO streams (e.g., an input streamand an output stream, respectively). The code may then manipulate dataof the input stream, and write an output to the output stream. Given useof a general purpose programming language, any of a variety of functionsmay be implemented according to the desires of the user. For example, afunction may search for and remove confidential information from theinput stream. While some code may utilize only input and output handles,other code may implement additional interfaces, such as networkcommunication interfaces. However, by providing the code with access toinput and output streams (via respective handles) created outside of thecode, the need for the code to create such streams is removed. Moreover,because streams may be created outside of the code, and potentiallyoutside of an execution environment of the code, stream manipulationcode need not necessarily be trusted to conduct certain operations thatmay be necessary to create a stream. For example, a stream may representinformation transmitted over a network connection, without the codebeing provided with access to that network connection. Thus, use of IOstreams to pass data into and out of code executions can simplify codewhile increasing security.

As noted above, the code may be authored in a variety of programminglanguages. Authoring tools for such languages are known in the art andthus will not be described herein. While authoring is described in FIG.3 as occurring on the client device 102A, the service 160 may in someinstances provide interfaces (e.g., web GUIs) through which to author orselect code.

At (2), the client device 102A submits the stream manipulation code tothe frontend 162 of the service 160, and requests that an execution ofthe code be inserted into an I/O path for one or more objects.Illustratively, the frontends 162 may provide one or more interfaces tothe device 102A enabling submission of the code (e.g., as a compressedfile). The frontends 162 may further provide interfaces enablingdesignation of one or more I/O paths to which an execution of the codeshould be applied. Each I/O path may correspond, for example, to anobject or collection of objects (e.g., a “bucket” of objects). In someinstances, an I/O path may further corresponding to a given way ofaccessing such object or collection (e.g., a URI through which theobject is created), to one or more accounts attempting to access theobject or collection, or to other path criteria. Designation of the pathmodification is then stored in the I/O path modification data store 164,at (3). Additionally, the stream manipulation code is stored within theobject data stores 166 at (4).

As such, when an I/O request is received via the specified I/O path, theservice 160 is configured to execute the stream manipulation codeagainst input data for the request (e.g., data provided by the clientdevice 102A or an object of the service 160, depending on the I/Orequest), before then applying the request to the output of the codeexecution. In this manner, a client device 102A (which in FIG. 3illustratively represents an owner of an object or object collection)can obtain greater control over data stored on and retrieved from theobject storage service 160.

The interactions of FIG. 3 generally relate to insertion of a singledata manipulation into the I/O path of an object or collection on theservice 160. However, in some embodiments of the present disclosure anowner of an object or collection is enabled to insert multiple datamanipulations into such an I/O path. Each data manipulation maycorrespond, for example, to a serverless code-based manipulation or anative manipulation of the service 160. For example, assume an owner hassubmitted a data set to the service 160 as an object, and that the ownerwishes to provide an end user with a filtered view of a portion of thatdata set. While the owner could store that filtered view of the portionas a separate object and provide the end user with access to thatseparate object, this results in data duplication on the service 160. Inthe case that the owner wishes to provide multiple end users withdifferent portions of the data set, potentially with customized filters,that data duplication grows, resulting in significant inefficiencies. Inaccordance with the present disclosure, another option may be for theowner to author or obtain custom code to implement different filters ondifferent portions of the object, and to insert that code into the I/Opath for the object. However, this approach may require the owner toduplicate some native functionality of the service 160 (e.g., an abilityto retrieve a portion of a data set). Moreover, this approach wouldinhibit modularity and reusability of code, since a single set of codewould be required to conduct two functions (e.g., selecting a portion ofthe data and filtering that portion).

To address these shortcomings, embodiments of the present disclosureenable an owner to create a pipeline of data manipulations to be appliedto an I/O path, linking together multiple data manipulations, each ofwhich may also be inserted into other I/O paths. An illustrativevisualization of such a pipeline is shown in FIG. 4 as pipeline 400.Specifically, the pipeline 400 illustrates a series of datamanipulations that an owner specifies are to occur on calling of arequest method against an object or object collection. As shown in FIG.4 , the pipeline begins with input data, specified within the callaccording to a called request method. For example, a PUT call maygenerally include the input data as the data to be stored, while a GETcall may generally include the input data by reference to a storedobject. A LIST call may specify a directory, a manifest of which is theinput data to the LIST request method.

Contrary to typical implementations of request methods, in theillustrative pipeline 400, the called request method is not initiallyapplied to the input data. Rather, the input data is initially passed toan execution of “code A” 404, where code A represents a first set ofuser-authored code. The output of that execution is then passed to“native function A” 406, which illustratively represents a nativefunction of the service 160, such as a “SELECT” or byte-range functionimplemented by the object manipulation engine 170. The output of thatnative function 406 is then passed to an execution of “code B” 408,which represents a second set of user-authored code. Thereafter, theoutput of that execution 408 is passed to the called request method 410(e.g., GET, PUT, LIST, etc.). Accordingly, rather than the requestmethod being applied to the input data as in conventional techniques, inthe illustration of FIG. 4 , the request method is applied to the outputof the execution 408, which illustratively represents a transformationof the input data according to one or more owner-specified manipulations412. Notably, implementation of the pipeline 400 may not require anyaction or imply any knowledge of the pipeline 400 on the part of acalling client device 102. As such, implementation of pipelines can beexpected not to impact existing mechanisms of interacting with theservice 160 (other than altering the data stored on or retrieved fromthe service 160 in accordance with the pipeline). For example,implementation of a pipeline can be expected not to requirereconfiguration of existing programs utilizing an API of the service160.

While the pipeline 400 of FIG. 4 is linear, in some embodiments theservice 160 may enable an owner to configure non-linear pipelines, suchas by include conditional or branching nodes within the pipeline.Illustratively, as described in more detail below, data manipulations(e.g., serverless-based functions) can be configured to include a returnvalue, such as an indication of successful execution, encountering anerror, etc. In one example, the return value of a data manipulation maybe used to select a conditional branch within a branched pipeline, suchthat a first return value causes the pipeline to proceed on a firstbranch, while a second return value causes the pipeline to proceed on asecond branch. In some instances, pipelines may include parallelbranches, such that data is copied or divided to multiple datamanipulations, the outputs of which are passed to a single datamanipulation for merging prior to executing the called method. Theservice 160 may illustratively provide a graphical user interfacethrough which owners can create pipelines, such as by specifying nodeswithin the pipeline and linking those nodes together via logicalconnections. A variety of flow-based development interfaces are knownand may be utilized in conjunction with aspects of the presentdisclosure.

Furthermore, in some embodiments, a pipeline applied to a particular I/Opath may be generated on-the-fly, at the time of a request, based ondata manipulations applied to the path according to different criteria.For example, an owner of a data collection may apply a first datamanipulation to all interactions with objects within a collection, and asecond data manipulation to all interactions obtained via a given URI.Thus, when a request is received to interact with an object within thecollection and via the given URI, the service 160 may generate apipeline combining the first and second data manipulations. The service160 may illustratively implement a hierarchy of criteria, such thatmanipulations applied to objects are placed within the pipeline prior tomanipulations applied to a URI, etc.

In some embodiments, client devices 102 may be enabled to requestinclusion of a data manipulation within a pipeline. For example, withinparameters of a GET request, a client device 102 may specify aparticular data manipulation to be included within a pipeline applied inconnection with the request. Illustratively, a collection owner mayspecify one or more data manipulations allowed for the collection, andfurther specify identifiers for those manipulations (e.g., functionnames). Thus, when requesting to interact with the collection, a clientdevice 102 may specify the identifier to cause the manipulation to beincluded within a pipeline applied to the I/O path. In one embodiment,client-requested manipulations are appended to the end of a pipelinesubsequent to owner-specified data manipulations and prior toimplementing the requested request method. For example, where a clientdevice 102 requests to GET a data set, and requests that a searchfunction by applied to the data set before the GET method isimplemented, the search function can receive as input data the output ofan owner-specified data manipulations for the data set (e.g.,manipulations to remove confidential information from the data set). Inaddition, requests may in some embodiments specify parameters to bepassed to one or more data manipulations (whether specified within therequest or not). Accordingly, while embodiments of the presentdisclosure can enable data manipulations without knowledge of thosemanipulations on the part of client devices 102, other embodiments mayenable client devices 102 to pass information within an I/O request foruse in implementing data manipulations.

Moreover, while example embodiments of the present disclosure arediscussed with respect to manipulation of input data to a called method,embodiments of the present disclosure may further be utilized to modifyaspects of a request, including a called method. For example, aserverless task execution may be passed the content of a request(including, e.g., a called method and parameters) and be configured tomodify and return, as a return value to a frontend 162, a modifiedversion of the method or parameters. Illustratively, where a clientdevice 102 is authenticated as a user with access to only a portion of adata object, a serverless task execution may be passed a call to “GET”that data object, and may transform parameters of the GET request suchthat it applies only to a specific byte range of the data objectcorresponding to the portion that the user may access. As a furtherexample, tasks may be utilized to implement customized parsing orrestrictions on called methods, such as by limiting the methods a usermay call, the parameters to those methods, or the like. In someinstances, application of one or more functions to a request (e.g., tomodify the method called or method parameters) may be viewed as a“pre-data processing” pipeline, and may thus be implemented prior toobtaining the input data within the pipeline 400 (which input data maychange due to changes in the request), or may be implementedindependently of a data manipulation pipeline 400.

Similarly, while example embodiments of the present disclosure arediscussed with respect to application of a called method to output dataof one or more data manipulations, in some embodiments manipulations canadditionally or alternatively occur after application of a calledmethod. For example, a data object may contain sensitive data that adata owner desires to remove prior to providing the data to a client.The owner may further enable a client to specify native manipulations tothe data set, such as conducting a database query on the dataset (e.g.,via a SELECT resource method). While the owner may specify a pipelinefor the data set to cause filtering of sensitive data to be conductedprior to application of the SELECT method, such an order of operationsmay be undesirable, as filtering may occur with respect to the entiredata object rather than solely the portion returned by the SELECT query.Accordingly, additionally or alternatively to specifying manipulationsthat occur prior to satisfying a request method, embodiments of thepresent disclosure can enable an owner to specify manipulations to occursubsequent to application of a called method but prior to conducting afinal operation to satisfy a request. For example, in the case of aSELECT operation, the service 160 may first conduct the SELECT operationagainst specified input data (e.g., a data object), and then pass theoutput of that SELECT operation to a data manipulation, such as aserverless task execution. The output of that execution can then bereturned to a client device 102 to satisfy the request.

While FIG. 3 and FIG. 4 are generally described with reference toserverless tasks authored by an owner of an object or collection, insome instances the service 160 may enable code authors to share theirtasks with other users of the service 160, such that code of a firstuser is executed in the I/O path of an object owned by a second user.The service 160 may also provide a library of tasks for use by eachuser. In some cases, the code of a shared task may be provided to otherusers. In other cases, the code of the shared task may be hidden fromother users, such that the other users can execute the task but not viewcode of the task. In these cases, other users may illustratively beenabled to modify specific aspects of code execution, such as thepermissions under which the code will execute.

With reference to FIGS. 5A and 5B, illustrative interactions will bediscussed for applying a modification to an I/O path for a request tostore an object on the service 160, which request is referred to inconnection with these figures as a “PUT” request or “PUT object call.”While shown in two figures, numbering of interactions is maintainedacross FIGS. 5A and 5B.

The interactions begin at (1), where a client device 102A submits a PUTobject call to the storage service 160, corresponding to a request tostore input data (e.g., included or specified within the call) on theservice 160. The input data may correspond, for example, to a filestored on the client device 102A. As shown in FIG. 5A, the call isdirected to a frontend 162 of the service 162 that, at (2), retrievesfrom the I/O path modification data store 164 an indication ofmodifications to the I/O path for the call. The indication may reflect,for example, a pipeline to be applied to calls received on the I/O path.The I/O path for a call may generally be specified with respect to arequest method included within a call, an object or collection ofobjects indicated within the call, a specific mechanism of reaching theservice 160 (e.g., protocol, URI used, etc.), an identity orauthentication status of the client device 102A, or a combinationthereof. For example, in FIG. 5A, the I/O path used can correspond touse of a PUT request method directed to a particular URI (e.g.,associated with the frontend 162) to store an object in a particularlogical location on the service 160 (e.g., a specific bucket). In FIGS.5A and 5B, it is assumed that an owner of that logical location haspreviously specified a modification to the I/O path, and specifically,has specified that a serverless function should be applied to the inputdata before a result of that function is stored in the service 160.

Accordingly, at (3), the frontend 162 detects within the modificationsfor the I/O path inclusion of a serverless task execution. Thus, at (4),the frontend 162 submits a call to the on-demand code execution system120 to execute the task specified within the modifications against theinput data specified within the call.

The on-demand code execution system 120, at (5), therefore generates anexecution environment 502 in which to execute code corresponding to thetask. Illustratively, the call may be directed to a frontend 130 of thesystem, which may distribute instructions to a worker manager 140 toselect or generate a VM instance 150 in which to execute the task, whichVM instance 150 illustratively represents the execution environment 502.During generation of the execution environment 502, the system 120further provisions the environment with code 504 of the task indicatedwithin the I/O path modification (which may be retrieved, for example,from the object data stores 166). While not shown in FIG. 5A, theenvironment 502 further includes other dependencies of the code, such asaccess to an operating system, a runtime required to execute the code,etc.

In some embodiments, generation of the execution environment 502 caninclude configuring the environment 502 with security constraintslimiting access to network resources. Illustratively, where a task isintended to conduct data manipulation without reference to networkresources, the environment 502 can be configured with no ability to sendor receive information via a network. Where a task is intended toutilize network resources, access to such resources can be provided on a“whitelist” basis, such that network communications from the environment502 are allowed only for specified domains, network addresses, or thelike. Network restrictions may be implemented, for example, by a hostdevice hosting the environment 502 (e.g., by a hypervisor or hostoperating system). In some instances, network access requirements may beutilized to assist in placement of the environment 502, either logicallyor physically. For example, where a task requires no access to networkresources, the environment 502 for the task may be placed on a hostdevice that is distant from other network-accessible services of theservice provider system 110, such as an “edge” device with alower-quality communication channel to those services. Where a taskrequires access to otherwise private network services, such as servicesimplemented within a virtual private cloud (e.g., alocal-area-network-like environment implemented on the service 160 onbehalf of a given user), the environment 502 may be created to existlogically within that cloud, such that a task execution 502 accessesresources within the cloud. In some instances, a task may be configuredto execute within a private cloud of a client device 102 that submits anI/O request. In other instances, a task may be configured to executewithin a private cloud of an owner of the object or collectionreferenced within the request.

In addition to generating the environment 502, at (6), the system 120provisions the environment with stream-level access to an input filehandle 506 and an output file handle 508, usable to read from and writeto the input data and output data of the task execution, respectively.In one embodiment, files handle 506 and 508 may point to a (physical orvirtual) block storage device (e.g., disk drive) attached to theenvironment 502, such that the task can interact with a local filesystem to read input data and write output data. For example, theenvironment 502 may represent a virtual machine with a virtual diskdrive, and the system 120 may obtain the input data from the service 160and store the input data on the virtual disk drive. Thereafter, onexecution of the code, the system 120 may pass to the code a handle ofthe input data as stored on the virtual disk drive, and a handle of afile on the drive to which to write output data. In another embodiment,files handle 506 and 508 may point to a network file system, such as anNFS-compatible file system, on which the input data has been stored. Forexample, the frontend 162 during processing of the call may store theinput data as an object on the object data stores 166, and thefile-level interface 166 may provide file-level access to the input dataand to a file representing output data. In some cases, the file handles506 and 508 may point to files on a virtual file system, such as a filesystem in user space. By providing handles 506 and 508, the task code504 is enabled to read the input data and write output data using streammanipulations, as opposed to being required to implement networktransmissions. Creation of the handles 506 and 508 (or streamscorresponding to the handles) may illustratively be achieved byexecution of staging code 157 within or associated with the environment502.

The interactions of FIG. 5A are continued in FIG. 5B, where the system120 executes the task code 504. As the task code 504 may beuser-authored, any number of functionalities may be implemented withinthe code 504. However, for the purposes of description of FIGS. 5A and5B, it will be assumed that the code 504, when executed, reads inputdata from the input file handle 506 (which may be passed as a commonlyused input stream, such as stdin), manipulates the input data, andwrites output data to the output file handle 508 (which may be passed asa commonly used output stream, such as stdout). Accordingly, at (8), thesystem 120 obtains data written to the output file (e.g., the filereferenced in the output file handle) as output data of the execution.In addition, at (9), the system 120 obtains a return value of the codeexecution (e.g., a value passed in a final call of the function). Forthe purposes of description of FIGS. 5A and 5B, it will be assumed thatthe return value indicates success of the execution. At (10), the outputdata and the success return value are then passed to the frontend 162.

While shown as a single interaction in FIG. 5B, in some embodimentsoutput data of a task execution and a return value of that execution maybe returned separately. For example, during execution, task code 504 maywrite to an output file through the handle 508, and this data may beperiodically or iteratively returned to the service 160. Illustratively,where the output file exists on a file system in user space implementedby staging code, the staging code may detect and forward each write tothe output file to the frontend 162. Where the output file exists on anetwork file system, writes to the file may directly cause the writtendata to be transmitted to the interface 166 and thus the service 160. Insome instances, transmitting written data iteratively may reduce theamount of storage required locally to the environment 502, since writtendata can, according to some embodiments, be deleted from local storageof the environment 502.

In addition, while a success return value is assumed in FIGS. 5A and 5B,other types of return value are possible and contemplated. For example,an error return value may be used to indicate to the frontend 162 thatan error occurred during execution of task code 504. As another example,user-defined return values may be used to control how conditionalbranching within a pipeline proceeds. In some cases, the return valuemay indicate to the frontend 162 a request for further processing. Forexample, a task execution may return to the frontend 162 a call toexecute another serverless task (potentially not specified within a pathmodification for the current I/O path). Moreover, return values mayspecify to the frontend 162 what return value is to be returned to theclient device 102A. For example, a typical PUT request method called atthe service 160 may be expected to return an HTTP 200 code (“OK”). Assuch, a success return value from the task code may further indicatethat the frontend 162 should return an HTTP 200 code to the clientdevice 102A. An error return value may, for example, indicate that thefrontend 162 should return a 3XX HTTP redirection or 4XX HTTP error codeto the client device 102A. Still further, in some cases, return valuesmay specify to the frontend 162 content of a return message to theclient device 102A other than a return value. For example, the frontend162 may be configured to return a given HTTP code (e.g., 200) for anyrequest from the client device 102A that is successfully retrieved atthe frontend 162 and invokes a data processing pipeline. A taskexecution may then be configured to specify, within its return value,data to be passed to the client device 102A in addition to that HTTPcode. Such data may illustratively include structured data (e.g.,extensible markup language (XML) data) providing information generatedby the task execution, such as data indicating success or failure of thetask. This approach may beneficially enable the frontend 162 to quicklyrespond to requests (e.g., without awaiting execution of a task) whilestill enabling a task execution to pass information to the client device102.

For purposes of the present illustration, it will be assumed that thesuccess return value of the task indicates that an HTTP 2XX successresponse should be passed to the device 102A. Accordingly, on receivingoutput data, the frontend 162 stores the output data as an object withinthe object data stores 166, (11). Interaction (11) illustrativelycorresponds to implementation of the PUT request method, initiallycalled for by the client device 102A, albeit by storing the output ofthe task execution rather than the provided input data. Afterimplementing the called PUT request method, the frontend 162, at (12),returns to the client device 102A the success indicator indicated by thesuccess return value of the task (e.g., an HTTP 200 response code).Thus, from the perspective of the client device 102A, a call to PUT anobject on the storage service 160 resulted in creation of that object onthe service 160. However, rather than storing the input data provided bythe device 102A, the object stored on the service 160 corresponds tooutput data of an owner-specified task, thus enabling the owner of theobject greater control over the contents of that object. In some usecases, the service 160 may additionally store the input data as anobject (e.g., where the owner-specified task corresponds to codeexecutable to provide output data usable in conjunction with the inputdata, such as checksum generated from the input data).

With reference to FIGS. 6A and 6B, illustrative interactions will bediscussed for applying a modification to an I/O path for a request toretrieve an object on the service 160, which request is referred to inconnection with these figures as a “GET” request or “GET call.” Whileshown in two figures, numbering of interactions is maintained acrossFIGS. 6A and 6B.

The interactions begin at (1), where a client device 102A submits a GETcall to the storage service 160, corresponding to a request to obtaindata of an object (identified within the call) stored on the service160. As shown in FIG. 6A, the call is directed to a frontend 162 of theservice 160 that, at (2), retrieves from the I/O path modification datastore 164 an indication of modifications to the I/O path for the call.For example, in FIG. 6A, the I/O path used can correspond to use of aGET request method directed to a particular URI (e.g., associated withthe frontend 162) to retrieve an object in a particular logical locationon the service 160 (e.g., a specific bucket). In FIGS. 6A and 6B, it isassumed that an owner of that logical location has previously specifieda modification to the I/O path, and specifically, has specified that aserverless function should be applied to the object before a result ofthat function is returned to the device 102A as the requested object.

Accordingly, at (3), the frontend 162 detects within the modificationsfor the I/O path inclusion of a serverless task execution. Thus, at (4),the frontend 162 submits a call to the on-demand code execution system120 to execute the task specified within the modifications against theobject specified within the call. The on-demand code execution system120, at (5), therefore generates an execution environment 502 in whichto execute code corresponding to the task. Illustratively, the call maybe directed to a frontend 130 of the system, which may distributeinstructions to a worker manager 140 to select or generate a VM instance150 in which to execute the task, which VM instance 150 illustrativelyrepresents the execution environment 502. During generation of theexecution environment 502, the system 120 further provisions theenvironment with code 504 of the task indicated within the I/O pathmodification (which may be retrieved, for example, from the object datastores 166). While not shown in FIG. 6A, the environment 502 furtherincludes other dependencies of the code, such as access to an operatingsystem, a runtime required to execute the code, etc.

In addition, at (6), the system 120 provisions the environment withfile-level access to an input file handle 506 and an output file handle508, usable to read from and write to the input data (the object) andoutput data of the task execution, respectively. As discussed above,files handle 506 and 508 may point to a (physical or virtual) blockstorage device (e.g., disk drive) attached to the environment 502, suchthat the task can interact with a local file system to read input dataand write output data. For example, the environment 502 may represent avirtual machine with a virtual disk drive, and the system 120 may obtainthe object referenced within the call from the service 160, at (6′), andstore the object on the virtual disk drive. Thereafter, on execution ofthe code, the system 120 may pass to the code a handle of the object asstored on the virtual disk drive, and a handle of a file on the drive towhich to write output data. In another embodiment, files handle 506 and508 may point to a network file system, such as an NFS-compatible filesystem, on which the object has been stored. For example, the file-levelinterface 166 may provide file-level access to the object as storedwithin the object data stores, as well as to a file representing outputdata. By providing handles 506 and 508, the task code 504 is enabled toread the input data and write output data using stream manipulations, asopposed to being required to implement network transmissions. Creationof the handles 506 and 508 may illustratively be achieved by executionof staging code 157 within or associated with the environment 502.

The interactions of FIG. 6A are continued in FIG. 6B, where the system120 executes the task code 504 at (7). As the task code 504 may beuser-authored, any number of functionalities may be implemented withinthe code 504. However, for the purposes of description of FIGS. 6A and6B, it will be assumed that the code 504, when executed, reads inputdata (corresponding to the object identified within the call) from theinput file handle 506 (which may be passed as a commonly used inputstream, such as stdin), manipulates the input data, and writes outputdata to the output file handle 508 (which may be passed as a commonlyused output stream, such as stdout). Accordingly, at (8), the system 120obtains data written to the output file (e.g., the file referenced inthe output file handle) as output data of the execution. In addition, at(9), the system 120 obtains a return value of the code execution (e.g.,a value passed in a final call of the function). For the purposes ofdescription of FIGS. 6A and 6B, it will be assumed that the return valueindicates success of the execution. At (10), the output data and thesuccess return value are then passed to the frontend 162.

On receiving output data and the return value, the frontend 162 returnsthe output data of the task execution as the requested object.Interaction (11) thus illustratively corresponds to implementation ofthe GET request method, initially called for by the client device 102A,albeit by returning the output of the task execution rather than theobject specified within the call. From the perspective of the clientdevice 102A, a call to GET an object from the storage service 160therefore results in return of data to the client device 102A as theobject. However, rather than returning the object as stored on theservice 160, the data provided to the client device 102A corresponds tooutput data of an owner-specified task, thus enabling the owner of theobject greater control over the data returned to the client device 102A.

Similarly to as discussed above with respect to FIGS. 5A and 5B, whileshown as a single interaction in FIG. 6B, in some embodiments outputdata of a task execution and a return value of that execution may bereturned separately. In addition, while a success return value isassumed in FIGS. 6A and 6B, other types of return value are possible andcontemplated, such as error values, pipeline-control values, or calls toexecute other data manipulations. Moreover, return values may indicatewhat return value is to be returned to the client device 102A (e.g., asan HTTP status code). In some instances, where output data isiteratively returned from a task execution, the output data may also beiteratively provided by the frontend 162 to the client device 102A.Where output data is large (e.g., on the order of hundreds of megabytes,gigabytes, etc.), iteratively returning output data to the client device102A can enable that data to be provided as a stream, thus speedingdelivery of the content to the device 102A relative to delaying returnof the data until execution of the task completes.

While illustrative interactions are described above with reference toFIGS. 5A-6B, various modifications to these interactions are possibleand contemplated herein. For example, while the interactions describedabove relate to manipulation of input data, in some embodiments aserverless task may be inserted into the I/O path of the service 160 toperform functions other than data manipulation. Illustratively, aserverless task may be utilized to perform validation or authorizationwith respect to a called request method, to verify that a client device102A is authorized to perform the method. Task-based validation orauthorization may enable functions not provided natively by the service160. For example, consider a collection owner who wishes to limitcertain client devices 102 to accessing only objects in the collectioncreated during a certain time range (e.g., the last 30 days, any timeexcluding the last 30 days, etc.). While the service 160 may nativelyprovide authorization on a per-object or per-collection basis, theservice 160 may in some cases not natively provide authorization on aduration-since-creation basis. Accordingly, embodiments of the presentdisclosure enable the owner to insert into an I/O path to the collection(e.g., a GET path using a given URI to the collection) a serverless taskthat determines whether the client is authorized to retrieve a requestedobject based on a creation time of that object. Illustratively, thereturn value provided by an execution of the task may correspond to an“authorized” or “unauthorized” response. In instances where a task doesnot perform data manipulation, it may be unnecessary to provision anenvironment of the task execution with input and output stream handles.Accordingly, the service 160 and system 120 can be configured to foregoprovisioning the environment with such handles in these cases. Whether atask implements data manipulation may be specified, for example, oncreation of the task and stored as metadata for the task (e.g., withinthe object data stores 166). The service 160 may thus determine fromthat metadata whether data manipulation within the task should besupported by provisioning of appropriate stream handles.

While some embodiments may utilize return values without use of streamhandles, other embodiments may instead utilize stream handles withoutuse of return values. For example, while the interactions describedabove relate to providing a return value of a task execution to thestorage service 160, in some instances the system 120 may be configuredto detect completion of a function based on interaction with an outputstream handle. Illustratively, staging code within an environment (e.g.,providing a file system in user space or network-based file system) maydetect a call to deallocate the stream handle (e.g., by calling a“file.close( )” function or the like). The staging code may interpretsuch a call as successful completion of the function, and notify theservice 160 of successful completion without requiring the taskexecution to explicitly provide return value.

While the interactions described above generally relate to passing ofinput data to a task execution, additional or alternative informationmay be passed to the execution. By way of non-limiting example, suchinformation may include the content of the request from the clientdevice 102 (e.g., the HTTP data transmitted), metadata regarding therequest (e.g., a network address from which the request was received ora time of the request), metadata regarding the client device 102 (e.g.,an authentication status of the device, account time, or requesthistory), or metadata regarding the requested object or collection(e.g., size, storage location, permissions, or time created, modified,or accessed). Moreover, in addition or as an alternative to manipulationof input data, task executions may be configured to modify metadataregarding input data, which may be stored together with the input data(e.g., within the object) and thus written by way of an output streamhandle, or which may be separately stored and thus modified by way of ametadata stream handle, inclusion of metadata in a return value, orseparate network transmission to the service 160.

With reference to FIG. 7 , an illustrative routine 700 for implementingowner-defined functions in connection with an I/O request obtained atthe object storage service of FIG. 1 over an I/O path will be described.The routine 700 may illustratively be implemented subsequent toassociation of an I/O path (e.g., defined in terms of an object orcollection, a mechanism of access to the object or collection, such as aURI, an account transmitting an IO request, etc.) with a pipeline ofdata manipulations. For example, the routine 700 may be implementedprior to the interactions of FIG. 3 , discussed above. The routine 700is illustratively implemented by a frontend 162.

The routine 700 begins at block 702, where the frontend 162 obtains arequest to apply an I/O method to input data. The request illustrativelycorresponds to a client device (e.g., an end user device). The I/Omethod may correspond, for example, to an HTTP request method, such asGET, PUT, LIST, DELETE, etc. The input data may be included within therequest (e.g., within a PUT request), or referenced in the request(e.g., as an existing object on the object storage service 160.

At block 704, the frontend 162 determines one or more data manipulationsin the I/O path for the request. As noted above, the I/O path may bedefined based on a variety of criteria (or combinations thereof), suchas the object or collection referenced in the request, a URI throughwhich the request was transmitted, an account associated with therequest, etc. Manipulations for each defined I/O path may illustrativelybe stored at the object storage service 160. Accordingly, at block 704,the frontend 162 may compare parameters of the I/O path for the requestto stored data manipulations at the object storage service 160 todetermine data manipulations inserted into the I/O path. In oneembodiment, the manipulations form a pipeline, such as the pipeline 400of FIG. 4 , which may be previously stored or constructed by thefrontend 162 at block 704 (e.g., by combining multiple manipulationsthat apply to the I/O path). In some instances, an additional datamanipulation may be specified within the request, which datamanipulation may be inserted, for example, prior to pre-specified datamanipulations (e.g., not specified within the request). In otherinstances, the request may exclude reference to any data manipulation.

At block 706, the frontend 162 passes input data of the I/O request toan initial data manipulation for the I/O path. The initial datamanipulation may include, for example, a native manipulation of theobject storage service 160 or a serverless task defined by an owner ofthe object or collection referenced in the call. Illustratively, wherethe initial data manipulation is a native manipulation, the frontend 162may pass the input to the object manipulation engine 170 of FIG. 1 .Where the initial data manipulation is a serverless task, the frontend162 can pass the input to the on-demand code execution system 120 ofFIG. 1 for processing via an execution of the task. An illustrativeroutine for implementing a serverless task is described below withreference to FIG. 8 .

While FIG. 7 illustratively describes data manipulations, in someinstances other processing may be applied to an I/O path by an owner.For example, an owner may insert into an I/O path for an object orcollection a serverless task that provides authentication independent ofdata manipulation. Accordingly, in some embodiments block 706 may bemodified such that other data, such as metadata regarding a request oran object specified in the request, is passed to an authenticationfunction or other path manipulation.

Thereafter, the routine 700 proceeds to block 708, where theimplementation of the routine 700 varies according to whether additionaldata manipulations have been associated with the I/O path. If so, theroutine 700 proceeds to block 710, where an output of a priormanipulation is passed to a next manipulation associated with the I/Opath (e.g., a subsequent stage of a pipeline).

Subsequent to block 710, the routine 700 then returns to block 708,until no additional manipulations exist to be implemented. The routine700 then proceeds to block 712, where the frontend 162 applies thecalled I/O method (e.g., GET, PUT, POST, LIST, DELETE, etc.) to theoutput of the prior manipulation. For example, the frontend 162 mayprovide the output as a result of a GET or LIST request, or may storethe output as a new object as a result of a PUT or POST request. Thefrontend 162 may further provide a response to the request to arequesting device, such as an indication of success of the routine 700(or, in cases of failure, failure of the routine). In one embodiment,the response may be determined by a return value provided by a datamanipulation implemented at blocks 706 or 710 (e.g., the finalmanipulation implemented before error or success). For example, amanipulation that indicates an error (e.g., lack of authorization) mayspecify an HTTP code indicating that error, while a manipulation thatproceeds successfully may instruct the frontend 162 to return an HTTPcode indicating success, or may instruct the frontend 162 to return acode otherwise associated with application of the I/O method (e.g., inthe absence of data manipulations). The routine 700 thereafter ends atblock 714.

Notably, application of the called method to that output, as opposed toinput specified in an initial request, may alter data stored in orretrieved from the object storage service 160. For example, data storedon the service 160 as an object may differ from the data submittedwithin a request to store such data. Similarly, data retrieved from thesystem as an object may not match the object as stored on the system.Accordingly, implementation of routine 700 enables an owner of dataobjects to assert greater control over I/O to an object or collectionstored on the object storage service 160 on behalf of the owner.

In some instances, additional or alternative blocks may be includedwithin the routine 700, or implementation of such blocks may includeadditional or alternative operations. For example, as discussed above,in addition to or as an alternative to providing output data, serverlesstask executions may provide a return value. In some instances, thisreturn value may instruct a frontend 162 as to further actions to takein implementing the manipulation. For example, an error return value mayinstruct the frontend 162 to halt implementation of manipulations, andprovide a specified error value (e.g., an HTTP error code) to arequesting device. Another return value may instruct the frontend 162 toimplement an additional serverless task or manipulation. Thus, theroutine 700 may in some cases be modified to include, subsequent toblocks 706 and 710 for example, handling of the return value of a priormanipulation (or block 708 may be modified to include handling of such avalue). Thus, the routine 700 is intended to be illustrative in nature.

With reference to FIG. 8 , an illustrative routine 800 will be describedfor executing a task on the on-demand code execution system of FIG. 1 toenable data manipulations during implementation of an owner-definedfunction. The routine 800 is illustratively implemented by the on-demandcode execution system 120 of FIG. 1 .

The routine 800 begins at block 802, where the system 120 obtains a callto implement a stream manipulation task (e.g., a task that manipulationsdata provided as an input IO stream handle). The call may be obtained,for example, in conjunction with blocks 706 or 710 of the routine 700 ofFIG. 7 . The call may include input data for the task, as well as othermetadata, such as metadata of a request that preceded the call, metadataof an object referenced within the call, or the like.

At block 804, the system 120 generates an execution environment for thetask. Generation of an environment may include, for example, generationof a container or virtual machine instance in which the task may executeand provisioning of the environment with code of the task, as well asany dependencies of the code (e.g., runtimes, libraries, etc.). In oneembodiment, the environment is generated with network permissionscorresponding to permissions specified for the task. As discussed above,such permissions may be restrictively (as opposed to permissively) set,according to a whitelist for example. As such, absent specification ofpermissions by an owner of an I/O path, the environment may lack networkaccess. Because the task operates to manipulate streams, rather thannetwork data, this restrictive model can increase security withoutdetrimental effect on functionality. In some embodiments, theenvironment may be generated at a logical network location providingaccess to otherwise restricted network resources. For example, theenvironment may be generated within a virtual private local area network(e.g., a virtual private cloud environment) associated with a callingdevice.

At block 806, the system 120 stages the environment with an IO streamrepresenting to input data. Illustratively, the system 120 may configurethe environment with a file system that includes the input data, andpass to the task code a handle enabling access of the input data as afile stream. For example, the system 120 may configure the environmentwith a network file system, providing network-based access to the inputdata (e.g., as stored on the object storage system). In another example,the system 120 may configure the environment with a “local” file system(e.g., from the point of view of an operating system providing the filesystem), and copy the input data to the local file system. The localfile system may, for example, be a filesystem in user space (FUSE). Insome instances, the local file system may be implemented on avirtualized disk drive, provided by the host device of the environmentor by a network-based device (e.g., as a network-accessible blockstorage device). In other embodiments, the system 120 may provide the IOstream by “piping” the input data to the execution environment, bywriting the input data to a network socket of the environment (which maynot provide access to an external network), etc. The system 120 furtherconfigures the environment with stream-level access to an output stream,such as by creating a file on the file system for the output data,enabling an execution of the task to create such a file, piping a handleof the environment (e.g., stdout) to a location on another VM instancecolocated with the environment or a hypervisor of the environment, etc.

At block 808, the task is executed within the environment. Execution ofthe task may include executing code of the task, and passing to theexecution handles or handles of the input stream and output stream. Forexample, the system 120 may pass to the execution a handle for the inputdata, as stored on the file system, as a “stdin” variable. The systemmay further pass to the execution a handle for the output data stream,e.g., as a “stdout” variable. In addition, the system 120 may pass otherinformation, such as metadata of the request or an object or collectionspecified within the request, as parameters to the execution. The codeof the task may thus execute to conduct stream manipulations on theinput data according to functions of the code, and to write an output ofthe execution to the output stream using OS-level stream operations.

The routine 800 then proceeds to block 810, where the system 120 returnsdata written to the output stream as output data of the task (e.g., tothe frontend 162 of the object storage system). In one embodiment, block810 may occur subsequent to the execution of the task completing, and assuch, the system 120 may return the data written as the complete outputdata of the task. In other instances, block 810 may occur duringexecution of the task. For example, the system 120 may detect new datawritten to the output stream and return that data immediately, withoutawaiting execution of the task. Illustratively, where the output streamis written to an output file, the system 120 may delete data of theoutput file after writing, such that sending of new data immediatelyobviates a need for the file system to maintain sufficient storage tostore all output data of the task execution. Still further, in someembodiments, block 810 may occur on detecting a close of the outputstream handle describing the output stream.

In addition, at block 812, subsequent to the execution completing, thesystem 120 returns a return value provided by the execution (e.g., tothe frontend 162 of the object storage system). The return value mayspecify an outcome of the execution, such as success or failure. In someinstances, the return value may specify a next action to be undertaken,such as implementation an additional data manipulation. Moreover, thereturn value may specify data to be provided to a calling devicerequesting an I/O operation on a data object, such as an HTTP code to bereturned. As discussed above, the frontend 162 may obtain such returnvalue and undertake appropriate action, such as returning an error orHTTP code to a calling device, implementing an additional datamanipulation, performing an I/O operation on output data, etc. In someinstances, a return value may be explicitly specified within code of thetask. In other instances, such as where no return value is specifiedwithin the code, a default return value may be returned (e.g., a ‘1’indicating success). The routine 800 then ends at block 814.

FIG. 9 is a flow diagram of an illustrative routine 900 that may beexecuted by a code execution service, such as the on-demand codeexecution system 120. The routine 900 may be used to dynamicallyconcatenate or otherwise combine multiple data objects or portionsthereof at run time (“on-the-fly”) in response to a request for a dataobject. In some embodiments, the routine 900 may be used to generate aresponse that includes a composite of multiple data objects, portionsthereof, or data derived therefrom, even if the request does notreference any or all of the multiple data objects. Aspects of theroutine 900 will be described with additional reference to FIG. 10 ,which is a system diagram of illustrative data flows and interactionsbetween various components of the service provider system 110.

The routine 900 may begin in response to an event, such as when theroutine illustrated in FIG. 8 reaches block 808. The routine 900 may beautomatically performed in response to a request from a requestor (e.g.,a request for data stored in the object storage service 160), withoutthe request specifying that the routine 900 is to be performed prior toor during generation of a response to the request. The routine 900 maybe a user-defined task, owner-defined function, or the like (referred toherein simply as a “function” for convenience), in the form of task code504 that is performed by a VM instance 150 or other executionenvironment 502 generated during the routine illustrated in FIG. 8 . Insome embodiments, the routine 900 or portions thereof may be implementedon multiple processors, serially or in parallel. Although portions ofthe routine 900 are described as generating a response to a request fora data object, in some embodiments the output of the routine 900 may notbe provided directly as the response to the request, but rather may beused by down-stream processes in preparing the response to the request.For example, the output of the routine 900 (also referred to herein as“function output”) may be further processed by another routine in apipeline, or processed by the object storage service 160 prior tosending a response to the request. Accordingly, descriptions ofgenerating a response may be interpreted as descriptions of generatingfunction output, and vice versa.

At block 902, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can receive parameters associatedwith a request for a data object. FIG. 10 illustrates the executionenvironment 502 receiving parameters associated with the request at (1).In some embodiments, the parameters may include: reference datacomprising a reference to a requested data object; reference datacomprising a reference to an output location at which output of thefunction is to be stored for use by the object storage service 160 inresponding to the request; context data regarding the request; otherdata; or some combination thereof. For example, the request may be aresource request, such as a GET request, for a particular data objectstored in the object storage service 160. The reference to the requesteddata object may be data that can be used by the execution environment502 to access the requested data object, such as: a file descriptor; afile handle; a pointer; or some other data representing an address oridentifier of the requested data object. The reference to the outputlocation for responding to the request may be data that can be used bythe execution environment 502 to write, store, or otherwise providefunction output data, such as: a file descriptor; a file handle; apointer; or some other data representing an address or identifier of alocation for providing output of the function. The context data mayinclude data regarding the context of the request, such as: anidentifier of a user, account or other source of the request; anidentifier of an access or security profile under which the request isbeing make; data representing the access or security rights under whichthe request is to be processed; an identifier of a location associatedwith the request; an identifier of a language associated with therequest; or data representing preferences or tendencies of a source ofthe request.

At block 904, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can determine that a response (orfunction output, if the current instance of the routine 900 is part of apipeline) is to be generated using one or more additional data objectsstored in the object storage service 160. In some embodiments, thedetermination may be based on context data and/or the requested dataobject. For example, data objects in a particular collection may berequired to be concatenated with or otherwise combined with one or moreadditional data objects when requested. If the requested data object isin the particular collection, then one or more additional data objectsmay be combined with the requested data object to produce functionoutput. As another example, configuration data such as a record storedin the object storage service 160 or some other data store may identifythe additional data object(s) to be combined with the requested dataobject. The execution environment 502 may access the record during theroutine 900 to determine whether to perform a combination and whichadditional data object(s) to combine with the requested data object. Inthis way, the identity of the additional data object(s) can easily bechanged without requiring programming changes to the task code 504executed by the execution environment 502. As a further example, theexecution environment 502 may test one or more items of context dataagainst one or more criteria to determine whether to perform acombination and which additional data object(s) to combine with therequested data object. If an item of context data satisfies one or morecriteria (e.g., a source or language of the request has a particularidentity, a location associated with the request is in a particularregion, etc.), then the execution environment 502 can determine that therequested data object is to be combined with one or more additional dataobjects, and also determine the identity of the additional object(s).

In one specific, non-limiting embodiment, the requested data object maybe a media file, such as a video file, audio file, or the like. Themedia file may belong to a collection of media files, such as a bucketowned or managed by an entity. The entity may specify that an additionalmedia file, such as an introduction, preview, or advertisement, may berequired to be combined with, or otherwise included in a response with,each media file in the collection. The execution environment 502 maydetermine that the requested data object is a media file in thecollection and, based on this property of the media file, the executionenvironment 502 may determine that the additional media file is to beincluded in the response. The identity of the additional media file (orfiles) may be specified by the code used to perform the determination,or it may be determined dynamically at run time (e.g., by accessingconfiguration data in a data store).

In another specific, non-limiting embodiment, the requested data objectmay be a data file, such as a spreadsheet, delimited file, or othercollection of data records. The data records may form a subset of thedata records that are to be returned in response to a request for thedata object. The execution environment 502 may determine that a responseto the request is to be generated using one or more additional dataobjects, such as additional data files comprising additional subsets ofdata records. The specific additional data object(s) may be dynamicallydetermined based on context associated with the request, a property ofthe requested data object (e.g., the bucket in which the requested dataobject is stored), etc. For example, a subset of regional data recordsfrom one or more additional data objects may be identified based on alocation associated with the request, and may be combined with therequested data object when responding to the request.

The example combinations discussed herein may be performed even in caseswhere the request for the requested data object (e.g., the GET resourcerequest) references the requested data object and does not reference theadditional data object(s).

At block 906, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can obtain a reference to theadditional data object(s). In some embodiments, the executionenvironment 502 may request, receive, or otherwise have access to amechanism by which the execution environment 502 can communicate withthe object storage service 160 to request data dynamically determinedduring execution of the routine 900 (e.g., after the executionenvironment 502 has been staged and provided with access to therequested data object). For example, the execution environment 502 mayreceive a reference to a network socket (e.g., a control plane handle)which the execution environment 502 can use to make additional requeststo the object storage service 160. Using this mechanism, the executionenvironment 502 can request and receive a reference (e.g., file handle,pointer, etc.) for the additional data object(s). FIG. 10 illustratesthe execution environment 502 obtaining the reference(s) to theadditional data object(s) at (2).

At block 908, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can obtain an initial data objectto be used in responding to the request. The initial data object is“initial” in the sense that it is obtained and/or used prior to one ormore subsequent data objects. The initial data object may be therequested data object or an additional data object, depending upon howthe response is to be structured. For example, if an additional dataobject such as an introduction or preview is to be provided before therequested data object, the execution environment 502 can use thereference to the additional data object to access the additional dataobject. As another example, if an additional data object is to beinserted into or provided after the requested data object, the executionenvironment 502 can use the reference to the requested data object toaccess the requested data object. FIG. 10 illustrates the executionenvironment 502 obtaining the initial data object at (3). In someembodiments, the initial data object may not be obtained from the objectstorage service 160 at block 908, but may be provided to the executionenvironment 502 previously. For example, during staging of the executionenvironment, the initial data object (e.g., the requested data object)may be obtained and stored on a computing device of the executionenvironment 502. As another example, when reference data for theadditional data object is obtained, the additional data object may beobtained and stored on a computing device of the execution environment502 at a location indicated by the reference data.

At block 910, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can prepare the initial part ofthe response using the initial data object obtained above. FIG. 10illustrates the execution environment 502 preparing the initial part ofthe response at (4). Preparing the initial part of the response mayinvolve writing a least a portion of the initial data object using thereference to the output location for responding to the request. Forexample, execution environment 502 can determine whether to include theentire initial data object, or a portion thereof, in the response. Asanother example, the execution environment 502 may determine whether tomodify the initial data object or a portion thereof, such as by removingdata, adding data, altering data, changing the format of the initialdata object, changing metadata associated with the data object, or thelike. Illustratively, the execution environment 502 may add or modify aheader for the initial data object, adjust the formatting of the initialdata object to be compatible with subsequent data objects, etc. Thesedeterminations may be based on parameters received above (e.g., aproperty of the requested data object, context data, etc.). Theexecution environment 502 can then place the determined data at theoutput location. In some embodiments, the execution environment 502 mayfirst store the initial data in a temporary internal storage locationfor later placement in the output location.

At decision block 912, task code 504 or other functional unit of the VMinstance 150 or other execution environment 502 can determine whetherthere is additional data to be included in the response. As discussedabove, the response may be based on the requested data object and one ormore additional data objects. The execution environment 502 candetermine whether all data has been included. If not, the routine 900may proceed to block 914. Otherwise, if all data to be included in theresponse has been included, the routine 900 may proceed to block 918.FIG. 10 illustrates the execution environment 502 determining thatadditional data is to be included in the response at (5).

At block 914, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can obtain a subsequent dataobject to be used in responding to the request. As with the initial dataobject discussed above, the subsequent data object may be the requesteddata object or an additional data object, depending upon how theresponse is to be structured. The subsequent data object is “subsequent”in the sense that it is obtained or used after the initial data object.For example, if an additional data object such as an introduction orpreview was access and included in the initial part of the response asdiscussed above, the execution environment 502 can use the reference tothe requested data object to access the requested data object forinclusion in a subsequent part of the response. FIG. 10 illustrates theexecution environment 502 obtaining the subsequent data object at (6).In some embodiments, the subsequent data object may not be obtained fromthe object storage service 160 at block 914, but may be provided to theexecution environment 502 previously. For example, during staging of theexecution environment, the subsequent data object (e.g., the requesteddata object) may be obtained and stored on a computing device of theexecution environment 502. As another example, when reference data forthe additional data object is obtained, the additional data object maybe obtained and stored on a computing device of the executionenvironment 502 at a location indicated by the reference data.

At block 916, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can prepare the subsequent partof the response using the subsequent data object obtained above. FIG. 10illustrates the execution environment 502 preparing the subsequent partof the response at (7). Preparing the subsequent part of the responsemay involve writing a least a portion of the subsequent data objectusing the reference to the output location for responding to therequest. For example, execution environment 502 can determine whether toinclude the entire subsequent data object, or a portion thereof, in theresponse. As another example, the execution environment 502 maydetermine whether to modify the subsequent data object or a portionthereof, such as by removing data, adding data, altering data, changingthe format of the subsequent data object, changing metadata associatedwith the data object, or the like. Illustratively, the executionenvironment 502 may remove a header from subsequent data objects, adjustthe formatting of subsequent data objects to be compatible with theinitial data object, etc. These determinations may be based onparameters received above (e.g., a property of the requested dataobject, context data, etc.). The execution environment 502 can thenplace the determined data at the output location. In some embodiments,the execution environment 502 may first store the initial data in atemporary internal storage location for later placement in the outputlocation. The routine 900 may return to decision block 912 to determinewhether additional data is to be included in the response.

At block 918, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can finalize the output of thefunction. Finalizing output of the function may include closing anoutput stream or file identified by the reference to the output locationand/or providing a return value (e.g., indicating success, failure, orsome other characteristic of function execution) to the object storageservice 160. In some embodiments, additional processing may be performedprior to closing the output stream. For example, the executionenvironment 502 may generate and write metadata describing properties ofthe of the output, such as the size of the output or header informationfor use by a device consuming the output. The routine may terminate atblock 920.

In some embodiments, output of the function may be cached so that thefunction does not need to retrieve and process the requested dataobject(s) and/or additional data object(s) each time the objects are tobe used. Instead, the function may determine whether the function outputhas been cached and, if so, whether the cached output has expired. Ifthe cached output has not expired, the function may obtain the cachedfunction output and provide it as the output of the function, or derivecurrent function output from the cached function output. The functionoutput may be cached locally within the execution environment (e.g., onthe server machine on which the task code 504 or other functional unitof the VM instance 150 is running), or in a network-accessible datastore (e.g., a high-speed dedicated cache server, a cache portion of theobject storage service 160, etc.). In some embodiments, cached functionoutput may be tagged or otherwise associated with the context data thatwas used to determine which data objects to combine to produce theoutput. In this way, the function may analyze the associated contextdata to determine which cached output, if any, is appropriate for use inresponding to a subsequent request based on the context data associatedwith the subsequent request. In some embodiments, data objects providedas input to the function or otherwise accessed by the function duringexecution may be cached so that they do not need to be obtained from theobject storage service 160 each time the function is executed.

In some embodiments, the data object that is requested and provided bythe routine 900 may not be a data object (or portion thereof) stored assuch in the object storage service 160. Instead, the routine 900 maydynamically generate a composite object definition, such as a manifest,that references one or more stored data objects or portions thereof, orthat includes data derived from one or more stored data objects. Forexample, the requested data object may be media content that correspondsto a data object in the object storage service 160, and an additionaldata object such as an introduction may be required to be presentedprior to the data object. The routine 900 may generate a manifest thatcan be used by a computing device to submit follow-up requests forindividual data objects in the correct sequence as dynamicallydetermined during execution of the routine 900. In this example, theinitial data object is the additional data object, and preparation ofthe initial portion of the response includes referencing the additionaldata object in the manifest. The subsequent data object is the dataobject for the requested media content, and preparation of the of thesubsequent portion of the response includes referencing the data objectin the manifest. The requested data object, and the output produced bythe function, is the manifest, which is dynamically generated using dataregarding data objects stored in the object storage service 160. Thus,the requested data object may not be a data object that is actuallystored in the object storage service 160.

In some embodiments, the request may include or reference a manifest ofdata objects (or portions thereof) stored in the object storage service160. Instead of obtaining the referenced data objects or portions andreturning them in combined form (either in a single data stream, or as acombination of multiple data steams), the routine 900 may determine toadd and/or remove data objects or portions thereof to and/or from thoselisted in the manifest. For example, the routine 900 may use any of themethods described above for determining which additional data object orobjects—not specifically requested—are to be included in a response to arequest. The routine 900 may then provide output that is a combinationof the dynamically determined set of data objects or portions, either ina single data stream or as a combination of multiple data streams.

FIG. 11 is a flow diagram of an illustrative routine 1100 that may beexecuted by a code execution service, such as the on-demand codeexecution system 120, to dynamically mask, scramble, obscure, orotherwise render unintelligible (collectively referred to herein as“obfuscate” for convenience) portions of a requested data object at runtime in response to a request for the data object. Although portions ofthe routine 1100 are described as generating a response to a request fora data object, in some embodiments the output of the routine 1100 maynot be provided directly as the response to the request, but rather maybe used by down-stream processes in preparing the response to therequest. For example, the function output may be further processed byanother routine in a pipeline, or processed by the object storageservice 160 prior to sending a response to the request. Accordingly,descriptions of generating a response may be interpreted as descriptionsof generating function output, and vice versa. Aspects of the routine1100 will be described with reference to FIG. 12 , which is a systemdiagram of illustrative data flows and interactions between variouscomponents of the service provider system 110.

The routine 1100 may begin in response to an event, such as when theroutine illustrated in FIG. 8 reaches block 808. The routine 1100 may beautomatically performed in response to a request from a requestor (e.g.,a request for data stored in the object storage service 160), withoutthe request specifying that the routine 1100 is to be performed prior toor during generation of a response to the request. For example, theroutine 1100 may be an owner-defined function, also referred to as auser-defined task, that is performed by a VM instance 150 or otherexecution environment 502 generated during the routine illustrated inFIG. 8 . In some embodiments, the routine 1100 or portions thereof maybe implemented on multiple processors, serially or in parallel.

At block 1102, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can receive parameters associatedwith a request for a data object. FIG. 12 illustrates the executionenvironment 502 receiving the parameters associated with the request at(1). In some embodiments, the parameters may include: reference datacomprising a reference to a requested data object; a reference to anoutput location at which output of the function is to be stored for useby the object storage service 160 in responding to the request; contextdata regarding the request; other data; or some combination thereof. Forexample, the request may be a resource request, such as a GET or SELECTrequest, for a particular dataset or other data object stored in theobject storage service 160. The reference to the requested data objectmay be data that can be used by the execution environment 502 to accessthe requested data object, such as: a file descriptor; a file handle; apointer; or some other data representing an address or identifier of therequested data object. The reference to the output location forresponding to the request may be data that can be used by the executionenvironment 502 to write, store, or otherwise provide output data, suchas: a file descriptor; a file handle; a pointer; or some other datarepresenting an address or identifier of a location for providing outputof the function. The context data may include data regarding the contextof the request, such as: an identifier of a user, account or othersource of the request; an identifier of an access or security profileunder which the request is being make; data representing the access orsecurity rights under which the request is to be processed; anidentifier of a location associated with the request; an identifier of alanguage associated with the request; or data representing preferencesor tendencies of a source of the request.

At block 1104, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can obtain the requested dataobject using the reference data. The requested data object may beobtained in un-obfuscated or substantially un-obfuscated form. FIG. 12illustrates the execution environment 502 obtaining the requested dataobject at (2). In some embodiments, the requested data object may not beobtained from the object storage service 160 at block 1104, but may beprovided to the execution environment 502 previously. For example,during staging of the execution environment, the requested data objectmay be obtained and stored on a computing device of the executionenvironment 502 at a location indicated by the reference data.

At block 1106, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can determine that one or moreportions of the requested data object are to be obfuscated. In someembodiments, the determination may be based on context data and/or therequested data object. The execution environment 502 may test one ormore items of context data against one or more criteria to determinewhether to perform an obfuscation and which portion(s) of the requesteddata object to obfuscate. If an item of context data satisfies one ormore criteria, then the execution environment 502 can determine that oneor more portions of the requested data object are to be obfuscated suchthat a recipient of the response to the request is unable to understandthe obfuscated portion(s). A different request for the same data object,but associated with different context data or other properties, may leadto a different result when testing the criteria and determining whetherto obfuscate portions of the data object. In some embodiments, differentportions of a requested data object may be associated with differentcriteria for un-obfuscated access. In such cases, the executionenvironment 502 may test the criteria for each of the associatedportions. FIG. 12 illustrates the execution environment 502 determiningto obfuscate portions of the requested data object at (3).

Testing the context data against the criteria may include: determiningthat a source of the request is prohibited from accessing the portion inun-obfuscated form, determining that a location associated with therequest is prohibited from accessing the portion in un-obfuscated form,or determining than an access right or security profile associated withthe request is prohibited from accessing the portion in un-obfuscatedform. In some embodiments, the testing of context data against thecriteria may be performed to determine that a portion of the requesteddata object is permitted to accessed in un-obfuscated form, rather thandetermining that the portion is prohibited from being accessed inun-obfuscated form. For example, testing the context data against thecriteria may include: determining that a source of the request ispermitted to access the portion in un-obfuscated form, determining thata location associated with the request is permitted to access theportion in un-obfuscated form, or determining than an access right orsecurity profile associated with the request is permitted to access theportion in un-obfuscated form.

In one specific, non-limiting embodiment, the requested data object maybe a data file, such as a spreadsheet, delimited file, or othercollection of data records. Some portions of the data file, such ascollections of records, collections of columns or data fields, or thelike may only be permitted to be accessed in un-obfuscated form if therequest satisfies one or more criteria. The execution environment 502may determine that properties of the request indicated by the contextdata or otherwise associated with the request fail to satisfy thecriteria for particular records, columns, and/or fields of the requesteddata object. The execution environment 502 may determine, based on thisfailure to satisfy the criteria, that the particular records, columns,and/or fields of the requested data object are to be obfuscated prior tobeing provided as output of the function.

At block 1108, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can selectively apply obfuscationto portions of the requested data object determined above. FIG. 12illustrates the execution environment 502 obfuscating portions of therequested data object at (4). Obfuscating the content of a portion ofthe requested data object may involve the use of one or more obfuscationmethods, such as scrambling the content in a pseudo random method,generating a hash of the content, replacing the content with a token, orthe like. For example, when replacing the content with a token, the taskcode 504 may identify a token mapped to the content in a data store suchas a key-value database, a relational database, the object storageservice 160, or another network-accessible data store. In someembodiments, different obfuscation methods may be used for differentportions of a data object, different data objects, different contextdata criteria, or the like.

In some embodiments, the obfuscation method may be specified by anentity that owns or is responsible for the data object. For example, anentity may specify that particular type of obfuscation (e.g., anindustry standard obfuscation method in the medical field) is to be usedfor a data object or bucket of data objects, while another entity mayspecify that a different type of obfuscation (e.g., tokenization using amapping of tokens to data) is to be used for a different data object orbucket of data objects. If no obfuscation method is specified, theexecution environment 502 may apply a default obfuscation method.

At block 1110, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can provide theselectively-obfuscated requested data object as output of the function.For example, the execution environment 502 can place theselectively-obfuscated requested data object at the output locationindicated by the reference data, and finalize the output. Finalizingoutput of the function may include closing the output stream or fileidentified by the reference to the output location and/or providing areturn value (e.g., indicating success, failure, or some othercharacteristics of function execution) to the object storage service160. FIG. 12 illustrates the execution environment 502 providing theselectively-obfuscated requested data object as output at (5). Theroutine 1100 may terminate at block 1112.

In some embodiments, output of the function may be cached so that thefunction does not need to retrieve and process requested data objects togenerate selectively-obfuscated data objects each time the objects areto be used. Instead, the function may determine whether the functionoutput has been cached and, if so, whether the cached output hasexpired. If the cached output has not expired, the function may obtainthe cached function output and provide it as the output of the function,or derive current function output from the cached function output. Thefunction output may be cached locally within the execution environment(e.g., on the server machine on which the task code 504 or otherfunctional unit of the VM instance 150 is running), or in anetwork-accessible data store (e.g., a high-speed dedicated cacheserver, a cache portion of the object storage service 160, etc.). Insome embodiments, cached function output may be tagged or otherwiseassociated with the context data that was used to determine whichportions of the requested data object to selectively obfuscate. In thisway, the function may analyze the associated context data to determinewhich cached output, if any, is appropriate for use in responding to asubsequent request based on the context data associated with thesubsequent request. In some embodiments, data objects provided as inputto the function or otherwise accessed by the function during executionmay be cached so that they do not need to be obtained from the objectstorage service 160 each time the function is executed.

FIG. 13 is a flow diagram of an illustrative routine 1300 that may beexecuted by a code execution service, such as the on-demand codeexecution system 120, to dynamically determine at run time a filteredsubset of a requested data object to provide in response to a requestfor the data object. Although portions of the routine 1300 are describedas generating a response to a request for a data object, in someembodiments the output of the routine 1300 may not be provided directlyas the response to the request, but rather may be used by down-streamprocesses in preparing the response to the request. For example, thefunction output may be further processed by another routine in apipeline, or processed by the object storage service 160 prior tosending a response to the request. Accordingly, descriptions ofgenerating a response may be interpreted as descriptions of generatingfunction output, and vice versa. Aspects of the routine 1300 will bedescribed with reference to FIG. 14 , which is a system diagram ofillustrative data flows and interactions between various components ofthe service provider system 110.

The routine 1300 may begin in response to an event, such as when theroutine illustrated in FIG. 8 reaches block 808. The routine 1300 may beautomatically performed in response to a request from a requestor (e.g.,a request for data stored in the object storage service 160), withoutthe request specifying that the routine 1300 is to be performed prior toor during generation of a response to the request. For example, theroutine 1300 may be an owner-defined function, also referred to as auser-defined task, that is performed by a VM instance 150 or otherexecution environment 502 generated during the routine illustrated inFIG. 8 . In some embodiments, the routine 1300 or portions thereof maybe implemented on multiple processors, serially or in parallel.

At block 1302, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can receive parameters associatedwith a request for a data object. FIG. 14 illustrates the executionenvironment 502 receiving the parameters associated with the request at(1). In some embodiments, the parameters may include: reference datacomprising a reference to a requested data object; a reference to anoutput location at which output of the function is to be stored for useby the object storage service 160 in responding to the request; contextdata regarding the request; other data; or some combination thereof. Forexample, the request may be a resource request, such as a GET request,for a particular data object stored in the object storage service 160.The reference to the requested data object may be data that can be usedby the execution environment 502 to access the requested data object,such as: a file descriptor; a file handle; a pointer; or some other datarepresenting an address or identifier of the requested data object. Thereference to the output location for responding to the request may bedata that can be used by the execution environment 502 to write, store,or otherwise provide output data, such as: a file descriptor; a filehandle; a pointer; or some other data representing an address oridentifier of a location for providing output of the function. Thecontext data may include data regarding the context of the request, suchas: an identifier of a user, account or other source of the request; anidentifier of an access or security profile under which the request isbeing make; data representing the access or security rights under whichthe request is to be processed; an identifier of a location associatedwith the request; an identifier of a language associated with therequest; or data representing preferences or tendencies of a source ofthe request.

At block 1304, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can obtain the requested dataobject using the reference data. FIG. 14 illustrates the executionenvironment 502 obtaining the requested data object at (2). In someembodiments, the requested data object may not be obtained from theobject storage service 160 at block 1104, but may be provided to theexecution environment 502 previously. For example, during staging of theexecution environment, the requested data object may be obtained andstored on a computing device of the execution environment 502 at alocation indicated by the reference data.

At block 1306, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can determine that one or moreportions of the requested data object are to be excluded from the outputof the function and thus not provided to a requesting device in responseto the request. In some embodiments, the determination may be based oncontext data and/or the requested data object. For example, theexecution environment 502 may test one or more items of context dataagainst one or more criteria to determine whether to exclude a portionor portions of the requested data object, and to determine whichportion(s) of the requested data object to exclude. If an item ofcontext data satisfies one or more criteria, then the executionenvironment 502 can determine that one or more portions of the requesteddata object are to be excluded from output of the function. A differentrequest for the same data object, but associated with different contextdata or other properties, may lead to a different result when testingthe criteria and determining whether to exclude portions of the dataobject. In some embodiments, different portions of a requested dataobject may be associated with different criteria for exclusion. In suchcases, the execution environment 502 may test the criteria for each ofthe associated portions.

Testing the context data against the criteria may include: determiningthat a source of the request is prohibited from accessing the portion,determining that a location associated with the request is prohibitedfrom accessing the portion, or determining than an access right orsecurity profile associated with the request is prohibited fromaccessing the portion. In some embodiments, the testing of context dataagainst the criteria may be performed to determine that a portion of therequested data object is permitted to accessed, rather than determiningthat the portion is prohibited from being accessed. For example, testingthe context data against the criteria may include: determining that asource of the request is permitted to access the portion, determiningthat a location associated with the request is permitted to access theportion, or determining than an access right or security profileassociated with the request is permitted to access the portion.

FIG. 14 illustrates the execution environment 502 determining to excludeportions of the requested data object at (3). In some embodiments, asshown, there may be multiple request sources 1402 and 1404. Requestsfrom these request sources 1402 and 1404 may be handled differently bythe execution environment 502 such that outputs of the function, and theresponses ultimately returned to the respective request sources 1402 and1404, may be different even if the same data object is requested by bothrequest sources 1402 and 1404. The difference in the way the requestsare handled may be based on different users using the different requestsources 1402 and 1404, the different request sources 1402 and 1404 beingin different geographic regions, or the different access permissionsassigned to the request sources 1402 and 1404 themselves. For example,an owner of a bucket of data objects stored on the object storageservice 160 may configure multiple distinct request sources or “portals”(e.g., servers providing interfaces to the object storage service 160)for accessing the data objects in the bucket. The owner may then assigndifferent access permissions to the different portals. Thereafter, theowner may direct users to use different portals depending upon theaccess permissions desired for the users.

In one specific, non-limiting embodiment, the requested data object maybe a data file, such as a spreadsheet, delimited file, tabular datafile, structured data file, or other collection of data records. Someportions of the data file, such as subsets of records, subsets ofcolumns, subsets of data fields or classes (e.g., those storingpersonally identifiable information or “PII”) and the like may only bepermitted to be accessed if the request satisfies one or more criteria.For example, portions may only be accessed if the request is associatedwith certain access rights. As another example, portions may only beaccessed if a source of the request is associated with a particularlocation or region. As a further example, portions may only be accessedif the request is received from a particular source or subset of sources(e.g., portals, endpoints, etc.). The execution environment 502 maydetermine that properties of the request indicated by the context dataor otherwise associated with the request satisfy criteria for particularportions of the requested data object to be excluded from the response(or, alternatively, fail to satisfy the criteria for particular portionsof the requested data object to be included in the response). Theexecution environment 502 may determine, based on this test with respectto one or more criteria, that the particular portions of the requesteddata object are to be excluded from output of the function. In someembodiments, different portions of a requested data object may beassociated with different criteria access. In such cases, the executionenvironment 502 may test the criteria for each of the associatedportions.

In another specific, non-limiting embodiment, the requested data objectmay have metadata, such as data representing an author, editor, creationdate, modification date, size, format, location, version, image captureor encoding properties, audio capture or encoding properties, videocapture or encoding properties, camera properties, hardwarecapabilities, software capabilities, and the like. The metadata may beembedded within the data object (e.g., in a header or reserved portionof the data object), or externally associated with the data object(e.g., in a directory). Some portions of the metadata, such asindividual items of metadata, predefined, groupings thereof, ordynamically determined groupings thereof, may only be permitted to beaccessed if the request satisfies one or more criteria (or,alternatively, may be prohibited from being accessed if the requestsatisfies one or more criteria). For example, portions may only beaccessed if the request is associated with certain access rights. Asanother example, portions may only be accessed if a source of therequest is associated with a particular location or region. As a furtherexample, portions may only be accessed if the request is received from aparticular source or subset of sources (e.g., portals, endpoints, etc.).The execution environment 502 may determine that properties of therequest indicated by the context data or otherwise associated with therequest fail to satisfy the criteria for particular portions of therequested data object. The execution environment 502 may determine,based on this failure to satisfy the criteria, that the particularportions of the metadata of the requested data object are to be excludedfrom output of the function such that they are not accessible in theresponse to the request or by other downstream functions in a pipeline.In some embodiments, different portions of metadata for a requested dataobject may be associated with different criteria access. In such cases,the execution environment 502 may test the criteria for each of theassociated portions.

In a further specific, non-limiting embodiment, the requested dataobjects that may be processed using this function are not limited todata objects stored as such on the object storage service 160.Alternatively, or in addition, a requested data object may be adynamically-generated data object, such as a data object comprising dataregarding other data objects stored on the object storage service 160.For example, a resource request such as the LIST request is not arequest for a pre-existing data object stored on the object storageservice 160, but rather a request for information regarding data objectsstored the object storage server 160, such as a list of data objects ina particular data object group (e.g., a bucket or directory) of theobject storage service 160, information regarding the data object groupsof the object storage service 160, information regarding data objectsused to represent users or groups of users of the object storage service160, etc. The requested information may be identifiers, summaries,directory information, metadata, or the like. It may be desirable tolimit the data objects identified in response to the LIST function, suchas by limiting LIST to only those data objects that satisfy one or morecriteria (or, alternatively, by excluding from LIST data regarding thoseobjects that satisfy one or more criteria). For example, some dataobjects may only be identified if the request is associated with certainaccess rights. As another example, some data objects may only beidentified if a source of the request is associated with a particularlocation or region. As a further example, some data objects may only beidentified if the request is received from a particular source or subsetof sources (e.g., portals, endpoints, etc.). The execution environment502 may determine that properties of the request indicated by thecontext data or otherwise associated with the request fail to satisfythe criteria for particular data objects that would otherwise beidentified. The execution environment 502 may determine, based on thisfailure to satisfy the criteria, that the particular data objects arenot to be identified in output of the function such that they are notidentified in the response to the request or by other downstreamfunctions in a pipeline. In some embodiments, different data objects maybe associated with different criteria access. In such cases, theexecution environment 502 may test the criteria for each of theassociated data objects.

In another specific, non-limiting embodiment, the requested data objectthat may be processed using this function may be transformed instead of,or in addition to, having portions of the data object excluded fromoutput of the function. The transformations may include modifications todata, modifications to formatting, application of encryption, etc. Forexample, the execution environment 502 may determine, for a resourcerequest such as a GET request for a media file, to modify the media fileby applying a watermark, changing the resolution or bitrate,incorporating a copyright notice, and the like. As another example, theexecution environment 502 may apply encryption to the data object. Theapplication of these transformations may be dynamically determined basedon criteria associated with context data, criteria associated with therequested data object itself, etc. The execution environment 502 maydetermine that properties of the request indicated by the context dataor otherwise associated with the request satisfy or fail to satisfyparticular criteria. For example, different levels of access rights forthe source of the request may cause the execution environment 502 toapply a watermark, downscale resolution or bitrate, provide an alternatedata object with a watermark or different resolution or bitrate, etc. Asanother example, different levels of encryption available to bedecrypted by the source of the request (as indicated by context data)may cause the execution environment 502 to dynamically select anencryption method based on the encryption that the source is configuredto decrypt.

At block 1308, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can selectively exclude portionsof the requested data object and/or otherwise apply transformations tothe requested data object as determined above. FIG. 14 illustrates theexecution environment 502 selectively excluding portions of therequested data object at (4). Selectively excluding the content of aportion of the requested data object may involve generating an outputversion of the data object that does not include the portions determinedto be excluded. For example, the execution environment 502 may read thecontent of the data object from an input file or stream (e.g., usingreference data such as a file descriptor for the requested data object),and write the non-excluded portions to an output file or stream (e.g.,using reference data such as a file descriptor for the function output),while not writing the portions to be excluded from the function output.Thus, to a recipient of a data object that has had portions selectivelyexcluded, the data object may appear to have never included thoseportions. The execution environment 502 may also apply one or moretransformations to ensure that the data object retains a valid format orconfiguration. For example, excluding certain data from the output of aLIST function, where the excluded data identifies a particular dataobject, may involve not only excluding the identifying data but alsoexcluding or modifying structural or formatting data (e.g., markup tags,field definitions, etc.) that would otherwise appear in the functionoutput as an empty object or null value.

At block 1310, task code 504 or other functional unit of the VM instance150 or other execution environment 502 can provide theselectively-filtered requested data object—from which certain portionshave been excluded—as output of the function. For example, the executionenvironment 502 can place the requested data object at the outputlocation indicated by the reference data, and finalize the output.Finalizing output of the function may include closing the output streamor file identified by the reference to the output location and/orproviding a return value (e.g., indicating success, failure, or someother characteristics of function execution) to the object storageservice 160. FIG. 14 illustrates the execution environment 502 providingthe selectively-filtered requested data object as output at (5). Theroutine may terminate at block 1312.

In some embodiments, output of the function may be cached so that thefunction does not need to retrieve and process requested data objects togenerate selectively-filtered requested data objects each time theobjects are to be used. Instead, the function may determine whether thefunction output has been cached and, if so, whether the cached outputhas expired. If the cached output has not expired, the function mayobtain the cached function output and provide it as the output of thefunction, or derive current function output from the cached functionoutput. The function output may be cached locally within the executionenvironment (e.g., on the server machine on which the task code 504 orother functional unit of the VM instance 150 is running), or in anetwork-accessible data store (e.g., a high-speed dedicated cacheserver, a cache portion of the object storage service 160, etc.). Insome embodiments, cached function output may be tagged or otherwiseassociated with the context data that was used to determine whichportions of the requested data object to selectively exclude. In thisway, the function may analyze the associated context data to determinewhich cached output, if any, is appropriate for use in responding to asubsequent request based on the context data associated with thesubsequent request. In some embodiments, data objects provided as inputto the function or otherwise accessed by the function during executionmay be cached so that they do not need to be obtained from the objectstorage service 160 each time the function is executed.

In some embodiments, the execution environment 502 may performtransformations on data stored in the object storage service 160 inresponse to a request for a data object. For example, requirements forcontent, formatting, and/or retention of data objects may change overtime, or due dates for such changes may be reached. Rather than activelyperforming transformations to the data objects to reflect the currentcontent, formatting, and/or retention requirements to the data objectswhen the requirements change or when the due dates are reached, the dataobjects may remain in the object storage service 160 unchanged orsubstantially unchanged until the next time they are to be accessed.When a subsequent request is received for a data object, the objectstorage service 160 and/or execution environment 502 may determine thata transformation is to be applied, and may apply the transformationprior to responding to the request for the data object. Thetransformation may be applied even if the request is a request only toreceive the data object, and is not a request to modify or delete thedata object. This “just-in-time” transformation may be desirable incertain cases to reduce the computational expense of applying thetransformations to all data objects immediately upon changes torequirements. For example, if a large amount of data would need to betransformed, or when subsequent requests for affected data objects areexpected to be rare, a bucket owner or other entity may prefer topostpone applying the transformations until the affected data objectsare accessed.

FIG. 14 illustrates the execution environment 502 applying ajust-in-time transformation at (2A) to a data object stored in theobject storage service 160 in response to receiving a request to receivethe data object. Although the just-in-time transformation is shown asoccurring in connection with operations of routine 1300 for selectiveexclusion of data object portions, just-in-time transformations may beperformed in connection with any of the other routines described herein,with any other owner-defined function or user-defined task, in apipeline with multiple functions, etc.

All of the methods and processes described above may be embodied in, andfully automated via, software code modules executed by one or morecomputers or processors. The code modules may be stored in any type ofnon-transitory computer-readable medium or other computer storagedevice. Some or all of the methods may alternatively be embodied inspecialized computer hardware.

Conditional language such as, among others, “can,” “could,” “might” or“may,” unless specifically stated otherwise, are otherwise understoodwithin the context as used in general to present that certainembodiments include, while other embodiments do not include, certainfeatures, elements or steps. Thus, such conditional language is notgenerally intended to imply that features, elements or steps are in anyway required for one or more embodiments or that one or more embodimentsnecessarily include logic for deciding, with or without user input orprompting, whether these features, elements or steps are included or areto be performed in any particular embodiment.

Disjunctive language such as the phrase “at least one of X, Y or Z,”unless specifically stated otherwise, is otherwise understood with thecontext as used in general to present that an item, term, etc., may beeither X, Y or Z, or any combination thereof (e.g., X, Y or Z). Thus,such disjunctive language is not generally intended to, and should not,imply that certain embodiments require at least one of X, at least oneof Y or at least one of Z to each be present.

Unless otherwise explicitly stated, articles such as ‘a’ or ‘an’ shouldgenerally be interpreted to include one or more described items.Accordingly, phrases such as “a device configured to” are intended toinclude one or more recited devices. Such one or more recited devicescan also be collectively configured to carry out the stated recitations.For example, “a processor configured to carry out recitations A, B andC” can include a first processor configured to carry out recitation Aworking in conjunction with a second processor configured to carry outrecitations B and C.

The term “or” should generally be understood to be inclusive, ratherthan exclusive. Accordingly, a set containing “a, b, or c” should beconstrued to encompass a set including a combination of a, b, and c.

Any routine descriptions, elements or blocks in the flow diagramsdescribed herein or depicted in the attached figures should beunderstood as potentially representing modules, segments, or portions ofcode which include one or more executable instructions for implementingspecific logical functions or elements in the routine. Alternateimplementations are included within the scope of the embodimentsdescribed herein in which elements or functions may be deleted, orexecuted out of order from that shown or discussed, includingsubstantially synchronously or in reverse order, depending on thefunctionality involved as would be understood by those skilled in theart.

It should be emphasized that many variations and modifications may bemade to the above-described embodiments, the elements of which are to beunderstood as being among other acceptable examples. All suchmodifications and variations are intended to be included herein withinthe scope of this disclosure and protected by the following claims.

What is claimed is:
 1. A system comprising: an object storage servicecomprising one or more computing devices, wherein the object storageservice stores a plurality of data objects; and a code execution servicecomprising one or more computing devices for on-demand execution offunctions in an input/output (I/O) path of the object storage service;wherein the object storage service is configured to at least: receive arequest for information regarding a data object group comprising asubset of the plurality of data objects; determine that a functionassociated with the data object group is to be executed prior toresponding to the request; and send the request to the code executionservice; and wherein the code execution service is configured to atleast: obtain the information regarding the data object group; determinethat a first portion of the information regarding the data object groupis to be excluded from a response, wherein a transformed second portionof the information regarding the data object group is to be included inthe response; apply a transformation to a second portion of theinformation regarding the data object group to generate the transformedsecond portion; and generate the response comprising the transformedsecond portion, wherein the response does not include the first portion.2. The system of claim 1, wherein the transformation comprises at leastone of: addition of a watermark, alteration of a resolution, alterationof a bitrate, or application of encryption.
 3. The system of claim 1,wherein the request is associated with context data representing one of:a source of the request, a location associated with the request, or anaccess right associated with the request, and wherein the code executionservice executes the function based on the context data.
 4. Acomputer-implemented method comprising: under control of a computingsystem comprising one or more computer processors configured to executespecific instructions, receiving a request for information regarding adata object group comprising a subset of a plurality of data objectsstored in a data store; determining, based at least partly on therequest, to execute a first function and a second function using theinformation regarding the data object group prior to providing aresponse to the request; executing the first function using a codeexecution system prior to providing the response, wherein the codeexecution system provides on-demand execution of functions in aninput/output (I/O) path of the data store, and wherein executing thefirst function comprises: determining to exclude a first portion of theinformation regarding the data object group from a first functionoutput; and generating first function output comprising a second portionof the information regarding the data object group, wherein the firstfunction output does not include the first portion; and executing thesecond function using the code execution system prior to providing theresponse, wherein executing the second function comprises generatingsecond function output; and providing the response to a computing devicebased at least partly on the first function output and the secondfunction output.
 5. The computer-implemented method of claim 4, furthercomprising obtaining context data associated with the request, whereindetermining to exclude the first portion is based at least partly on thecontext data satisfying one or more criteria.
 6. Thecomputer-implemented method of claim 5, wherein executing the firstfunction further comprises determining that the context data satisfiesone or more criteria, wherein the context data represents one of: asource of the request, a location associated with the request, or anaccess right associated with the request, and wherein the one or morecriteria relates to at least one of: a permitted source of the request,a prohibited source of the request, a permitted location of the request,a prohibited location of the request, a permitted access rightassociated with the request, or a prohibited access right associatedwith the request.
 7. The computer-implemented method of claim 4, whereinexecuting the first function further comprises applying a transformationto the second portion of the information regarding the data objectgroup, wherein the transformation comprises at least one of: addition ofa watermark, alteration of a resolution, alteration of a bitrate, orapplication of encryption.
 8. The computer-implemented method of claim4, further comprising: receiving a second request for the informationregarding the data object group, wherein the request is associated withfirst context data and wherein the second request is associated withsecond context data different than the first context data; and executingthe first function using the code execution system to generate a thirdfunction output based at least partly on the second context data,wherein the third function output is different than the first functionoutput.
 9. The computer-implemented method of claim 4, furthercomprising: storing the first function output in a cache; receiving asecond request for the information regarding the data object group; andproviding a second response to the second request based at least partlyon the first function output stored in the cache.
 10. A systemcomprising: a data store storing plurality of data objects grouped intoa plurality of different data object groups; and a code execution systemcomprising one or more computing devices in communication with the datastore and configured to at least: receive a request for informationregarding a data object group of the plurality of different data objectgroups; determine, based at least partly on the request, to execute afunction prior to providing a response to the request; configure a codeexecution service to execute the function, wherein the code executionservice is thereby configured to: obtain the information regarding thedata object group; determine to exclude at least a first portion of theinformation regarding the data object group from a function output;generate the function output comprising a second portion of theinformation regarding the data object group, wherein the function outputdoes not include the first portion; and provide the response to acomputing device based at least partly on the function output.
 11. Thesystem of claim 10, wherein the data object group comprises a group ofdata objects regarding users.
 12. The system of claim 10, wherein therequest comprises a hypertext transfer protocol request corresponding toa LIST request.
 13. The system of claim 10, wherein the code executionsystem is further configured to obtain context data associated with therequest, wherein determining to exclude the first portion from theresponse is based at least partly on the context data satisfying one ormore criteria.
 14. The system of claim 13, wherein the code executionsystem is further configured to determine that the context datasatisfies one or more criteria, wherein the context data represents oneof: a source of the request, a location associated with the request, oran access right associated with the request, and wherein the one or morecriteria relate to at least one of: a permitted source of the request, aprohibited source of the request, a permitted location of the request, aprohibited location of the request, a permitted access right associatedwith the request, or a prohibited access right associated with therequest.
 15. The system of claim 10, wherein the code execution systemis further configured to determine that a first subset of data objectssatisfy a first criterion, and a second subset of data objects satisfy asecond criterion different from the first criterion, wherein the firstportion of the information comprises information regarding the firstsubset of data objects, and wherein the second portion of theinformation comprises information regarding the second subset of dataobjects.
 16. The system of claim 10, wherein the information regardingthe data object group comprises one or more of: identifiers of dataobjects in the data object group; summaries of data objects in the dataobject group; directory information for data objects in the data objectgroup; or metadata of data objects in the data object group.
 17. Thesystem of claim 10, wherein the code execution system is furtherconfigured to: store the function output in a cache; receive a secondrequest for the information regarding the data object group; and providea second response to the second request based at least partly on thefunction output stored in the cache.